summaryrefslogtreecommitdiffstats
path: root/fs/buffer.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2010-03-23 00:36:35 +0100
committerAl Viro <viro@zeniv.linux.org.uk>2010-05-22 00:31:14 +0200
commit551de6f34dfeefbeeadb32909c387d393114ecc8 (patch)
tree822af803e7e75ed476b0a176639c162e0395910d /fs/buffer.c
parentSaner locking around deactivate_super() (diff)
downloadlinux-551de6f34dfeefbeeadb32909c387d393114ecc8.tar.xz
linux-551de6f34dfeefbeeadb32909c387d393114ecc8.zip
Leave superblocks on s_list until the end
We used to remove from s_list and s_instances at the same time. So let's *not* do the former and skip superblocks that have empty s_instances in the loops over s_list. The next step, of course, will be to get rid of rescan logics in those loops. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/buffer.c')
-rw-r--r--fs/buffer.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/buffer.c b/fs/buffer.c
index c9c266db0624..021ec4da9932 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -568,6 +568,8 @@ static void do_thaw_all(struct work_struct *work)
spin_lock(&sb_lock);
restart:
list_for_each_entry(sb, &super_blocks, s_list) {
+ if (list_empty(&sb->s_instances))
+ continue;
sb->s_count++;
spin_unlock(&sb_lock);
down_read(&sb->s_umount);