46 lines
1.4 KiB
Diff
46 lines
1.4 KiB
Diff
|
From 79abe2bd501d628b165f323098d6972d69bd13d7 Mon Sep 17 00:00:00 2001
|
||
|
From: Hans de Goede <hdegoede@redhat.com>
|
||
|
Date: Wed, 16 Mar 2016 13:20:51 +0100
|
||
|
Subject: [PATCH] uas: Limit qdepth at the scsi-host level
|
||
|
|
||
|
Commit 64d513ac31bd ("scsi: use host wide tags by default") causes
|
||
|
the scsi-core to queue more cmnds then we can handle on devices with
|
||
|
multiple LUNs, limit the qdepth at the scsi-host level instead of
|
||
|
per slave to fix this.
|
||
|
|
||
|
BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1315013
|
||
|
Cc: stable@vger.kernel.org # 4.4.x and 4.5.x
|
||
|
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||
|
---
|
||
|
drivers/usb/storage/uas.c | 7 ++++++-
|
||
|
1 file changed, 6 insertions(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
|
||
|
index c90a7e4..b5cb7ab 100644
|
||
|
--- a/drivers/usb/storage/uas.c
|
||
|
+++ b/drivers/usb/storage/uas.c
|
||
|
@@ -800,7 +800,6 @@ static int uas_slave_configure(struct scsi_device *sdev)
|
||
|
if (devinfo->flags & US_FL_BROKEN_FUA)
|
||
|
sdev->broken_fua = 1;
|
||
|
|
||
|
- scsi_change_queue_depth(sdev, devinfo->qdepth - 2);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
@@ -932,6 +931,12 @@ static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
||
|
if (result)
|
||
|
goto set_alt0;
|
||
|
|
||
|
+ /*
|
||
|
+ * 1 tag is reserved for untagged commands +
|
||
|
+ * 1 tag to avoid of by one errors in some bridge firmwares
|
||
|
+ */
|
||
|
+ shost->can_queue = devinfo->qdepth - 2;
|
||
|
+
|
||
|
usb_set_intfdata(intf, shost);
|
||
|
result = scsi_add_host(shost, &intf->dev);
|
||
|
if (result)
|
||
|
--
|
||
|
2.7.3
|
||
|
|