From: Long Li <lon...@microsoft.com>

[ Upstream commit 7b571c19d4c0b78d27dd3bf1f3c42e4032390af6 ]

Commit 0ed881027690 ("scsi: storvsc: setup 1:1 mapping between hardware
queue and CPU queue") introduced a regression for disks attached to
IDE. For these disks the host VSP only offers one VMBUS channel. Setting
multiple queues can overload the VMBUS channel and result in performance
drop for high queue depth workload on system with large number of CPUs.

Fix it by leaving the number of hardware queues to 1 (default value) for
IDE disks.

Fixes: 0ed881027690 ("scsi: storvsc: setup 1:1 mapping between hardware queue 
and CPU queue")
Link: 
https://lore.kernel.org/r/1578960516-108228-1-git-send-email-lon...@linuxonhyperv.com
Reviewed-by: Ming Lei <ming....@redhat.com>
Signed-off-by: Long Li <lon...@microsoft.com>
Signed-off-by: Martin K. Petersen <martin.peter...@oracle.com>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 drivers/scsi/storvsc_drv.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
index 542d2bac2922c..5087ed6afbdc3 100644
--- a/drivers/scsi/storvsc_drv.c
+++ b/drivers/scsi/storvsc_drv.c
@@ -1835,9 +1835,11 @@ static int storvsc_probe(struct hv_device *device,
         */
        host->sg_tablesize = (stor_device->max_transfer_bytes >> PAGE_SHIFT);
        /*
+        * For non-IDE disks, the host supports multiple channels.
         * Set the number of HW queues we are supporting.
         */
-       host->nr_hw_queues = num_present_cpus();
+       if (!dev_is_ide)
+               host->nr_hw_queues = num_present_cpus();
 
        /*
         * Set the error handler work queue.
-- 
2.20.1

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to