btrfs: use sprout device_list_mutex in btrfs_init_devices_late
authorAnand Jain <anand.jain@oracle.com>
Fri, 4 Sep 2020 17:34:31 +0000 (01:34 +0800)
committerDavid Sterba <dsterba@suse.com>
Wed, 7 Oct 2020 10:12:22 +0000 (12:12 +0200)
On a mounted sprout filesystem, all threads now are using the
sprout::device_list_mutex, and this is the only code using the
seed::device_list_mutex. This patch converts to use the sprouts
fs_info->fs_devices->device_list_mutex.

The same reasoning holds true here, that device delete is holding
the sprout::device_list_mutex.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/volumes.c

index 79fe982..beacc77 100644 (file)
@@ -7195,16 +7195,14 @@ void btrfs_init_devices_late(struct btrfs_fs_info *fs_info)
        mutex_lock(&fs_devices->device_list_mutex);
        list_for_each_entry(device, &fs_devices->devices, dev_list)
                device->fs_info = fs_info;
-       mutex_unlock(&fs_devices->device_list_mutex);
 
        list_for_each_entry(seed_devs, &fs_devices->seed_list, seed_list) {
-               mutex_lock(&seed_devs->device_list_mutex);
                list_for_each_entry(device, &seed_devs->devices, dev_list)
                        device->fs_info = fs_info;
-               mutex_unlock(&seed_devs->device_list_mutex);
 
                seed_devs->fs_info = fs_info;
        }
+       mutex_unlock(&fs_devices->device_list_mutex);
 }
 
 static u64 btrfs_dev_stats_value(const struct extent_buffer *eb,