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