NVMe: Correctly handle IOCTL_SUBMIT_IO when cpus > online queues
Subsystems (2)
PATCH v2 1/1 NVMe: Correctly handle IOCTL_SUBMIT_IO when cpus > online queues
nvme_submit_io_cmd() uses smp_processor_id() to pick an IO queue index. This patch fixes the case where there are more cpus from which the ioctl call can originate than online queues, which can happen when a device supports or was allocated fewer interrupt vectors than exist cpu cores.
Thanks to Keith Busch for the implementation suggestion.
Signed-off-by Sam Bradshaw <sbradshaw at micron.com>
---
drivers/block/nvme-core.c +2 -2
@@ -979,8 +979,8 @@ int nvme_submit_admin_cmd(struct nvme_dev *dev, struct nvme_command *cmd,int nvme_submit_io_cmd (struct nvme_dev *dev,struct nvme_command *cmd,u32 *result) { -return nvme_submit_sync_cmd (dev,smp_processor_id () +1 , cmd, result, -NVME_IO_TIMEOUT ); +return nvme_submit_sync_cmd (dev,this_cpu_read (*dev->io_queue), cmd, + result,NVME_IO_TIMEOUT ); } static int nvme_submit_admin_cmd_async(struct nvme_dev *dev,