提交 1494583d 编写于 作者: A Al Viro

fix get_active_super()/umount() race

This one needs restarts...
Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
上级 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% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册