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;