summaryrefslogtreecommitdiffstats
path: root/fs/super.c
diff options
context:
space:
mode:
authorDave Chinner <dchinner@redhat.com>2015-03-04 12:37:22 -0500
committerJosef Bacik <jbacik@fb.com>2015-08-17 18:39:46 -0400
commit74278da9f70d84d715601fe794567a6d2bfdf078 (patch)
tree49262a88fc42b85bfe4930f5cd7a832d5ba647c6 /fs/super.c
parentcbedaac63481dea52327127a9f1c60f092bd6b07 (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.c3
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