diff --git a/[refs] b/[refs] index a72b1a3152a5..af23245b0131 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e7fe0585ca8793e2d43c57e77d4ca79042806acf +refs/heads/master: 1494583de59dfad2e3a6788ce9817e658d32df22 diff --git a/trunk/fs/super.c b/trunk/fs/super.c index 4df8233dfb61..44971d7df1ce 100644 --- a/trunk/fs/super.c +++ b/trunk/fs/super.c @@ -471,17 +471,17 @@ struct super_block *get_active_super(struct block_device *bdev) if (!bdev) return NULL; +restart: spin_lock(&sb_lock); list_for_each_entry(sb, &super_blocks, s_list) { if (list_empty(&sb->s_instances)) continue; - if (sb->s_bdev != bdev) - continue; - - if (grab_super(sb)) /* drops sb_lock */ - return sb; - - spin_lock(&sb_lock); + if (sb->s_bdev == bdev) { + if (grab_super(sb)) /* drops sb_lock */ + return sb; + else + goto restart; + } } spin_unlock(&sb_lock); return NULL;