Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

fix get_active_super()/umount() race



This one needs restarts...

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent e7fe0585
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -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 (sb->s_bdev == bdev) {
			if (grab_super(sb)) /* drops sb_lock */
				return sb;

		spin_lock(&sb_lock);
			else
				goto restart;
		}
	}
	spin_unlock(&sb_lock);
	return NULL;