]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
scsi: usb: uas: Do not query the IO Advice Hints Grouping mode page for USB/UAS devices
authorBart Van Assche <bvanassche@acm.org>
Thu, 13 Jun 2024 21:18:27 +0000 (14:18 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 27 Jun 2024 11:52:29 +0000 (13:52 +0200)
commit 57619f3cdeb5ae9f4252833b0ed600e9f81da722 upstream.

Recently it was reported that the following USB storage devices are
unusable with Linux kernel 6.9:

 * Kingston DataTraveler G2
 * Garmin FR35

This is because attempting to read the IO Advice Hints Grouping mode page
causes these devices to reset. Hence do not read the IO Advice Hints
Grouping mode page from USB/UAS storage devices.

Acked-by: Alan Stern <stern@rowland.harvard.edu>
Cc: stable@vger.kernel.org
Fixes: 4f53138fffc2 ("scsi: sd: Translate data lifetime information")
Reported-by: Joao Machado <jocrismachado@gmail.com>
Closes: https://lore.kernel.org/linux-scsi/20240130214911.1863909-1-bvanassche@acm.org/T/#mf4e3410d8f210454d7e4c3d1fb5c0f41e651b85f
Tested-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Bisected-by: Christian Heusel <christian@heusel.eu>
Reported-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Closes: https://lore.kernel.org/linux-scsi/CACLx9VdpUanftfPo2jVAqXdcWe8Y43MsDeZmMPooTzVaVJAh2w@mail.gmail.com/
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Link: https://lore.kernel.org/r/20240613211828.2077477-3-bvanassche@acm.org
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/storage/scsiglue.c
drivers/usb/storage/uas.c

index 12cf9940e5b6759167f9ae7450df8af92a85c63a..7d87e2a521ed922bb49ff1e37c82b80e8dae4401 100644 (file)
@@ -86,6 +86,12 @@ static int slave_alloc (struct scsi_device *sdev)
        if (us->protocol == USB_PR_BULK && us->max_lun > 0)
                sdev->sdev_bflags |= BLIST_FORCELUN;
 
+       /*
+        * Some USB storage devices reset if the IO advice hints grouping mode
+        * page is queried. Hence skip that mode page.
+        */
+       sdev->sdev_bflags |= BLIST_SKIP_IO_HINTS;
+
        return 0;
 }
 
index 08953f0d4532aa72cf0d36ea96b2128cc4519de6..1ed2bdda0cd40aa2fdc8aa8cff54f861f95e9760 100644 (file)
@@ -21,6 +21,7 @@
 #include <scsi/scsi.h>
 #include <scsi/scsi_eh.h>
 #include <scsi/scsi_dbg.h>
+#include <scsi/scsi_devinfo.h>
 #include <scsi/scsi_cmnd.h>
 #include <scsi/scsi_device.h>
 #include <scsi/scsi_host.h>
@@ -820,6 +821,12 @@ static int uas_slave_alloc(struct scsi_device *sdev)
        struct uas_dev_info *devinfo =
                (struct uas_dev_info *)sdev->host->hostdata;
 
+       /*
+        * Some USB storage devices reset if the IO advice hints grouping mode
+        * page is queried. Hence skip that mode page.
+        */
+       sdev->sdev_bflags |= BLIST_SKIP_IO_HINTS;
+
        sdev->hostdata = devinfo;
 
        /*