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

Commit 5139cff5 authored by David Sterba's avatar David Sterba
Browse files

btrfs: lift uuid_mutex to callers of btrfs_parse_early_options



Prepartory work to fix race between mount and device scan.

btrfs_parse_early_options calls the device scan from mount and we'll
need to let mount completely manage the critical section.

Reviewed-by: default avatarAnand Jain <anand.jain@oracle.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent f5194e34
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -890,6 +890,8 @@ static int btrfs_parse_early_options(const char *options, fmode_t flags,
	char *device_name, *opts, *orig, *p;
	int error = 0;

	lockdep_assert_held(&uuid_mutex);

	if (!options)
		return 0;

@@ -915,10 +917,8 @@ static int btrfs_parse_early_options(const char *options, fmode_t flags,
				error = -ENOMEM;
				goto out;
			}
			mutex_lock(&uuid_mutex);
			error = btrfs_scan_one_device(device_name,
					flags, holder, fs_devices);
			mutex_unlock(&uuid_mutex);
			kfree(device_name);
			if (error)
				goto out;
@@ -1526,8 +1526,10 @@ static struct dentry *btrfs_mount_root(struct file_system_type *fs_type,
	if (!(flags & SB_RDONLY))
		mode |= FMODE_WRITE;

	mutex_lock(&uuid_mutex);
	error = btrfs_parse_early_options(data, mode, fs_type,
					  &fs_devices);
	mutex_unlock(&uuid_mutex);
	if (error) {
		return ERR_PTR(error);
	}