]> git.dujemihanovic.xyz Git - linux.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)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 14 Jun 2024 01:03:13 +0000 (21:03 -0400)
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>
drivers/usb/storage/scsiglue.c
drivers/usb/storage/uas.c

index b31464740f6c869b6a762f05958d3710cecebfe5..8c8b5e6041cc275e5b927e5be94b355b8440083f 100644 (file)
@@ -79,6 +79,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 a48870a87a293c0828c6e82330ac0a947ef7ba21..b610a2de4ae5dd0dba60d964b54b45bdd82efb5f 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;
        return 0;
 }