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

Commit 6de1d09d authored by Al Viro's avatar Al Viro
Browse files

btrfs: fix mount/umount race



Do *NOT* skip doomed superblocks in btrfs_test_super(); we want
sget() to wait for their shutdown to complete.  Since we don't
mutilate ->s_fs_info in ->put_super() anymore (or free what it
used to point to until the superblock is past being findable
by sget()), we can just DTRT there and report a match.

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent aea52e19
Loading
Loading
Loading
Loading
+4 −9
Original line number Diff line number Diff line
@@ -733,20 +733,15 @@ static int btrfs_test_super(struct super_block *s, void *data)
	struct btrfs_root *test_root = data;
	struct btrfs_root *root = btrfs_sb(s);

	/*
	 * If this super block is going away, return false as it
	 * can't match as an existing super block.
	 */
	if (!atomic_read(&s->s_active))
		return 0;
	return root->fs_info->fs_devices == test_root->fs_info->fs_devices;
}

static int btrfs_set_super(struct super_block *s, void *data)
{
	int err = set_anon_super(s, data);
	if (!err)
		s->s_fs_info = data;

	return set_anon_super(s, data);
	return err;
}

/*