|
@@ -2749,16 +2749,16 @@ static long btrfs_ioctl_fs_info(struct btrfs_fs_info *fs_info,
|
|
if (!fi_args)
|
|
if (!fi_args)
|
|
return -ENOMEM;
|
|
return -ENOMEM;
|
|
|
|
|
|
- mutex_lock(&fs_devices->device_list_mutex);
|
|
|
|
|
|
+ rcu_read_lock();
|
|
fi_args->num_devices = fs_devices->num_devices;
|
|
fi_args->num_devices = fs_devices->num_devices;
|
|
- memcpy(&fi_args->fsid, fs_info->fsid, sizeof(fi_args->fsid));
|
|
|
|
|
|
|
|
- list_for_each_entry(device, &fs_devices->devices, dev_list) {
|
|
|
|
|
|
+ list_for_each_entry_rcu(device, &fs_devices->devices, dev_list) {
|
|
if (device->devid > fi_args->max_id)
|
|
if (device->devid > fi_args->max_id)
|
|
fi_args->max_id = device->devid;
|
|
fi_args->max_id = device->devid;
|
|
}
|
|
}
|
|
- mutex_unlock(&fs_devices->device_list_mutex);
|
|
|
|
|
|
+ rcu_read_unlock();
|
|
|
|
|
|
|
|
+ memcpy(&fi_args->fsid, fs_info->fsid, sizeof(fi_args->fsid));
|
|
fi_args->nodesize = fs_info->nodesize;
|
|
fi_args->nodesize = fs_info->nodesize;
|
|
fi_args->sectorsize = fs_info->sectorsize;
|
|
fi_args->sectorsize = fs_info->sectorsize;
|
|
fi_args->clone_alignment = fs_info->sectorsize;
|
|
fi_args->clone_alignment = fs_info->sectorsize;
|