Commit 1494583d authored by Al Viro's avatar Al Viro

fix get_active_super()/umount() race

This one needs restarts...
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent e7fe0585
......@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment