btrfs: switch to RCU for device traversal in btrfs_ioctl_fs_info
We don't need to use the mutex as we do not modify the devices nor the list itself and just read information about device counts. Move copying fsid out of the protected section, not applicable to RCU same as the rest of the retrieved information. Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
c5593ca3c8
commit
d03262c75d
|
@ -2749,16 +2749,16 @@ static long btrfs_ioctl_fs_info(struct btrfs_fs_info *fs_info,
|
|||
if (!fi_args)
|
||||
return -ENOMEM;
|
||||
|
||||
mutex_lock(&fs_devices->device_list_mutex);
|
||||
rcu_read_lock();
|
||||
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)
|
||||
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->sectorsize = fs_info->sectorsize;
|
||||
fi_args->clone_alignment = fs_info->sectorsize;
|
||||
|
|
Loading…
Reference in New Issue