Commit ace5d474 authored by Alexander Viro's avatar Alexander Viro Committed by Linus Torvalds

[PATCH] fix for get_sb_bdev() bug

	Grr...  When loop in get_sb_bdev() had been switched from
global list of superblock to per-type one, we should have switched
from sb_entry(p) (aka. list_entry(p, struct super_block, s_list)) to
list_entry(p, struct super_block, s_instances).

	As it is, we end up with false negatives all the time.  I.e.
second mount from the same block device with the same type gices
a new superblock.  With obvious nasty results...

	This fixes that.
parent 2f96736a
...@@ -728,7 +728,8 @@ struct super_block *get_sb_bdev(struct file_system_type *fs_type, ...@@ -728,7 +728,8 @@ struct super_block *get_sb_bdev(struct file_system_type *fs_type,
spin_lock(&sb_lock); spin_lock(&sb_lock);
list_for_each(p, &fs_type->fs_supers) { list_for_each(p, &fs_type->fs_supers) {
struct super_block *old = sb_entry(p); struct super_block *old;
old = list_entry(p, struct super_block, s_instances);
if (old->s_bdev != bdev) if (old->s_bdev != bdev)
continue; continue;
if (!grab_super(old)) if (!grab_super(old))
......
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