Commit 57619f3c authored by Bart Van Assche's avatar Bart Van Assche Committed by Martin K. Petersen

scsi: usb: uas: Do not query the IO Advice Hints Grouping mode page for USB/UAS devices

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: default avatarAlan Stern <stern@rowland.harvard.edu>
Cc: stable@vger.kernel.org
Fixes: 4f53138f ("scsi: sd: Translate data lifetime information")
Reported-by: default avatarJoao Machado <jocrismachado@gmail.com>
Closes: https://lore.kernel.org/linux-scsi/20240130214911.1863909-1-bvanassche@acm.org/T/#mf4e3410d8f210454d7e4c3d1fb5c0f41e651b85fTested-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
Bisected-by: default avatarChristian Heusel <christian@heusel.eu>
Reported-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
Closes: https://lore.kernel.org/linux-scsi/CACLx9VdpUanftfPo2jVAqXdcWe8Y43MsDeZmMPooTzVaVJAh2w@mail.gmail.com/Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
Link: https://lore.kernel.org/r/20240613211828.2077477-3-bvanassche@acm.orgSigned-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 633aeefa
...@@ -79,6 +79,12 @@ static int slave_alloc (struct scsi_device *sdev) ...@@ -79,6 +79,12 @@ static int slave_alloc (struct scsi_device *sdev)
if (us->protocol == USB_PR_BULK && us->max_lun > 0) if (us->protocol == USB_PR_BULK && us->max_lun > 0)
sdev->sdev_bflags |= BLIST_FORCELUN; 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; return 0;
} }
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <scsi/scsi.h> #include <scsi/scsi.h>
#include <scsi/scsi_eh.h> #include <scsi/scsi_eh.h>
#include <scsi/scsi_dbg.h> #include <scsi/scsi_dbg.h>
#include <scsi/scsi_devinfo.h>
#include <scsi/scsi_cmnd.h> #include <scsi/scsi_cmnd.h>
#include <scsi/scsi_device.h> #include <scsi/scsi_device.h>
#include <scsi/scsi_host.h> #include <scsi/scsi_host.h>
...@@ -820,6 +821,12 @@ static int uas_slave_alloc(struct scsi_device *sdev) ...@@ -820,6 +821,12 @@ static int uas_slave_alloc(struct scsi_device *sdev)
struct uas_dev_info *devinfo = struct uas_dev_info *devinfo =
(struct uas_dev_info *)sdev->host->hostdata; (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; sdev->hostdata = devinfo;
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment