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.
spin_lock(&sb_lock);
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)
continue;
if (!grab_super(old))