summaryrefslogtreecommitdiff
path: root/fs/super.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/super.c')
-rw-r--r--fs/super.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/fs/super.c b/fs/super.c
index 4df8233dfb61..44971d7df1ce 100644
--- a/fs/super.c
+++ b/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;