From 6adfc60f19546722832199c516d382fbe2aa7901 Mon Sep 17 00:00:00 2001 From: Al Viro Date: Sun, 21 Mar 2010 22:34:11 -0400 Subject: [PATCH] --- yaml --- r: 197938 b: refs/heads/master c: 389b8be6ef419397e4f176652927ebad6ebb4b77 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/super.c | 19 +++---------------- 2 files changed, 4 insertions(+), 17 deletions(-) diff --git a/[refs] b/[refs] index ddb26681e71e..6cc6547ff2a7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 79d7e39ee1d4b423206f6cfd2cd2eed6253d95fe +refs/heads/master: 389b8be6ef419397e4f176652927ebad6ebb4b77 diff --git a/trunk/fs/super.c b/trunk/fs/super.c index 156eae5ed503..d8c8b1d2d010 100644 --- a/trunk/fs/super.c +++ b/trunk/fs/super.c @@ -487,22 +487,9 @@ struct super_block *get_active_super(struct block_device *bdev) if (sb->s_bdev != bdev) continue; - sb->s_count++; - spin_unlock(&sb_lock); - down_write(&sb->s_umount); - if (sb->s_root) { - spin_lock(&sb_lock); - if (sb->s_count > S_BIAS) { - atomic_inc(&sb->s_active); - sb->s_count--; - spin_unlock(&sb_lock); - return sb; - } - spin_unlock(&sb_lock); - } - up_write(&sb->s_umount); - put_super(sb); - yield(); + if (grab_super(sb)) /* drops sb_lock */ + return sb; + spin_lock(&sb_lock); } spin_unlock(&sb_lock);