From: Alexander Viro Date: Mon, 11 Mar 2002 06:22:18 +0000 (-0800) Subject: [PATCH] fix for get_sb_bdev() bug X-Git-Tag: v2.5.7-pre1~28^2 X-Git-Url: http://git.neil.brown.name/?a=commitdiff_plain;h=ace5d474a6ad06d97017ff07e4a50a720b4b8f22;p=history.git [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. --- diff --git a/fs/super.c b/fs/super.c index 149e89ec125c..e83164f10634 100644 --- a/fs/super.c +++ b/fs/super.c @@ -728,7 +728,8 @@ restart: 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))