diff options
author | Dave Chinner <dchinner@redhat.com> | 2015-03-04 12:37:22 -0500 |
---|---|---|
committer | Josef Bacik <jbacik@fb.com> | 2015-08-17 18:39:46 -0400 |
commit | 74278da9f70d84d715601fe794567a6d2bfdf078 (patch) | |
tree | 49262a88fc42b85bfe4930f5cd7a832d5ba647c6 /fs/super.c | |
parent | cbedaac63481dea52327127a9f1c60f092bd6b07 (diff) |
inode: convert inode_sb_list_lock to per-sb
The process of reducing contention on per-superblock inode lists
starts with moving the locking to match the per-superblock inode
list. This takes the global lock out of the picture and reduces the
contention problems to within a single filesystem. This doesn't get
rid of contention as the locks still have global CPU scope, but it
does isolate operations on different superblocks form each other.
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Josef Bacik <jbacik@fb.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Tested-by: Dave Chinner <dchinner@redhat.com>
Diffstat (limited to 'fs/super.c')
-rw-r--r-- | fs/super.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/super.c b/fs/super.c index b61372354f2b..c808183554a2 100644 --- a/fs/super.c +++ b/fs/super.c | |||
@@ -191,6 +191,7 @@ static struct super_block *alloc_super(struct file_system_type *type, int flags) | |||
191 | INIT_HLIST_NODE(&s->s_instances); | 191 | INIT_HLIST_NODE(&s->s_instances); |
192 | INIT_HLIST_BL_HEAD(&s->s_anon); | 192 | INIT_HLIST_BL_HEAD(&s->s_anon); |
193 | INIT_LIST_HEAD(&s->s_inodes); | 193 | INIT_LIST_HEAD(&s->s_inodes); |
194 | spin_lock_init(&s->s_inode_list_lock); | ||
194 | 195 | ||
195 | if (list_lru_init_memcg(&s->s_dentry_lru)) | 196 | if (list_lru_init_memcg(&s->s_dentry_lru)) |
196 | goto fail; | 197 | goto fail; |
@@ -399,7 +400,7 @@ void generic_shutdown_super(struct super_block *sb) | |||
399 | sync_filesystem(sb); | 400 | sync_filesystem(sb); |
400 | sb->s_flags &= ~MS_ACTIVE; | 401 | sb->s_flags &= ~MS_ACTIVE; |
401 | 402 | ||
402 | fsnotify_unmount_inodes(&sb->s_inodes); | 403 | fsnotify_unmount_inodes(sb); |
403 | 404 | ||
404 | evict_inodes(sb); | 405 | evict_inodes(sb); |
405 | 406 | ||