aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Sterba <dsterba@suse.com>2018-03-20 18:44:50 -0400
committerDavid Sterba <dsterba@suse.com>2018-05-28 12:07:25 -0400
commita0fecc23718aa9ef020b8c86173a0b783ed37dcf (patch)
treee26a3fafb050829e607690236c094dc7d4559c1d
parent149196a2aea682ec9d7d50ec00d779a380deb7aa (diff)
btrfs: remove wrong use of volume_mutex from btrfs_dev_replace_start
The volume mutex does not protect against anything in this case, the comment about scrub is right but not related to locking and looks confusing. The comment in btrfs_find_device_missing_or_by_path is wrong and confusing too. The device_list_mutex is not held here to protect device lookup, but in this case device replace cannot run in parallel with device removal (due to exclusive op protection), so we don't need further locking here. Reviewed-by: Anand Jain <anand.jain@oracle.com> Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r--fs/btrfs/dev-replace.c7
-rw-r--r--fs/btrfs/volumes.c4
2 files changed, 1 insertions, 10 deletions
diff --git a/fs/btrfs/dev-replace.c b/fs/btrfs/dev-replace.c
index 9fe7be7fdbef..d097701d494d 100644
--- a/fs/btrfs/dev-replace.c
+++ b/fs/btrfs/dev-replace.c
@@ -414,18 +414,13 @@ int btrfs_dev_replace_start(struct btrfs_fs_info *fs_info,
414 struct btrfs_device *tgt_device = NULL; 414 struct btrfs_device *tgt_device = NULL;
415 struct btrfs_device *src_device = NULL; 415 struct btrfs_device *src_device = NULL;
416 416
417 /* the disk copy procedure reuses the scrub code */
418 mutex_lock(&fs_info->volume_mutex);
419 ret = btrfs_find_device_by_devspec(fs_info, srcdevid, 417 ret = btrfs_find_device_by_devspec(fs_info, srcdevid,
420 srcdev_name, &src_device); 418 srcdev_name, &src_device);
421 if (ret) { 419 if (ret)
422 mutex_unlock(&fs_info->volume_mutex);
423 return ret; 420 return ret;
424 }
425 421
426 ret = btrfs_init_dev_replace_tgtdev(fs_info, tgtdev_name, 422 ret = btrfs_init_dev_replace_tgtdev(fs_info, tgtdev_name,
427 src_device, &tgt_device); 423 src_device, &tgt_device);
428 mutex_unlock(&fs_info->volume_mutex);
429 if (ret) 424 if (ret)
430 return ret; 425 return ret;
431 426
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index 07706c0a5781..9e5d27dd00b7 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -2218,10 +2218,6 @@ int btrfs_find_device_missing_or_by_path(struct btrfs_fs_info *fs_info,
2218 struct btrfs_device *tmp; 2218 struct btrfs_device *tmp;
2219 2219
2220 devices = &fs_info->fs_devices->devices; 2220 devices = &fs_info->fs_devices->devices;
2221 /*
2222 * It is safe to read the devices since the volume_mutex
2223 * is held by the caller.
2224 */
2225 list_for_each_entry(tmp, devices, dev_list) { 2221 list_for_each_entry(tmp, devices, dev_list) {
2226 if (test_bit(BTRFS_DEV_STATE_IN_FS_METADATA, 2222 if (test_bit(BTRFS_DEV_STATE_IN_FS_METADATA,
2227 &tmp->dev_state) && !tmp->bdev) { 2223 &tmp->dev_state) && !tmp->bdev) {