diff mbox series

[2/2] scsi: core: Do not query IO hints for USB devices

Message ID 20240612165249.2671204-3-bvanassche@acm.org (mailing list archive)
State Superseded
Headers show
Series Do not read the IO hints VPD page from USB storage devices | expand

Commit Message

Bart Van Assche June 12, 2024, 4:52 p.m. UTC
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 hint VPD page causes these devices
to reset. Hence do not read the IO hint VPD page from USB storage devices.

Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: linux-usb@vger.kernel.org
Cc: Joao Machado <jocrismachado@gmail.com>
Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: Christian Heusel <christian@heusel.eu>
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>
---
 drivers/usb/storage/scsiglue.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Alan Stern June 12, 2024, 6:08 p.m. UTC | #1
On Wed, Jun 12, 2024 at 09:52:49AM -0700, Bart Van Assche wrote:
> 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 hint VPD page causes these devices
> to reset. Hence do not read the IO hint VPD page from USB storage devices.
> 
> Cc: Alan Stern <stern@rowland.harvard.edu>
> Cc: linux-usb@vger.kernel.org
> Cc: Joao Machado <jocrismachado@gmail.com>
> Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
> Cc: Christian Heusel <christian@heusel.eu>
> 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>
> ---
>  drivers/usb/storage/scsiglue.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c
> index b31464740f6c..9a7185c68872 100644
> --- a/drivers/usb/storage/scsiglue.c
> +++ b/drivers/usb/storage/scsiglue.c
> @@ -79,6 +79,8 @@ static int slave_alloc (struct scsi_device *sdev)
>  	if (us->protocol == USB_PR_BULK && us->max_lun > 0)
>  		sdev->sdev_bflags |= BLIST_FORCELUN;
>  
> +	sdev->sdev_bflags |= BLIST_SKIP_IO_HINTS;
> +
>  	return 0;
>  }

You might want to do the same thing in uas.c.  I don't know if UAS 
devices suffer from the same problem, but it wouldn't be surprising if 
they do.

Alan Stern
Bart Van Assche June 12, 2024, 7:30 p.m. UTC | #2
On 6/12/24 11:08 AM, Alan Stern wrote:
> You might want to do the same thing in uas.c.  I don't know if UAS
> devices suffer from the same problem, but it wouldn't be surprising if
> they do.

Hi Alan,

How about replacing patch 2/2 from this series with the patch below?

Thanks,

Bart.

diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c
index b31464740f6c..b4cf0349fd0d 100644
--- a/drivers/usb/storage/scsiglue.c
+++ b/drivers/usb/storage/scsiglue.c
@@ -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 hints VPD page is queried.
+	 * Hence skip that VPD page.
+	 */
+	sdev->sdev_bflags |= BLIST_SKIP_IO_HINTS;
+
  	return 0;
  }

diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
index a48870a87a29..bb75901b53e3 100644
--- a/drivers/usb/storage/uas.c
+++ b/drivers/usb/storage/uas.c
@@ -820,6 +820,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 hints VPD page is queried.
+	 * Hence skip that VPD page.
+	 */
+	sdev->sdev_bflags |= BLIST_SKIP_IO_HINTS;
+
  	sdev->hostdata = devinfo;
  	return 0;
  }
Alan Stern June 12, 2024, 7:43 p.m. UTC | #3
On Wed, Jun 12, 2024 at 12:30:34PM -0700, Bart Van Assche wrote:
> On 6/12/24 11:08 AM, Alan Stern wrote:
> > You might want to do the same thing in uas.c.  I don't know if UAS
> > devices suffer from the same problem, but it wouldn't be surprising if
> > they do.
> 
> Hi Alan,
> 
> How about replacing patch 2/2 from this series with the patch below?

That's better, thanks.

Alan Stern

> 
> Thanks,
> 
> Bart.
> 
> diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c
> index b31464740f6c..b4cf0349fd0d 100644
> --- a/drivers/usb/storage/scsiglue.c
> +++ b/drivers/usb/storage/scsiglue.c
> @@ -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 hints VPD page is queried.
> +	 * Hence skip that VPD page.
> +	 */
> +	sdev->sdev_bflags |= BLIST_SKIP_IO_HINTS;
> +
>  	return 0;
>  }
> 
> diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
> index a48870a87a29..bb75901b53e3 100644
> --- a/drivers/usb/storage/uas.c
> +++ b/drivers/usb/storage/uas.c
> @@ -820,6 +820,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 hints VPD page is queried.
> +	 * Hence skip that VPD page.
> +	 */
> +	sdev->sdev_bflags |= BLIST_SKIP_IO_HINTS;
> +
>  	sdev->hostdata = devinfo;
>  	return 0;
>  }
>
Andy Shevchenko June 13, 2024, 5:44 p.m. UTC | #4
On Wed, Jun 12, 2024 at 6:53 PM Bart Van Assche <bvanassche@acm.org> wrote:
>
> 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 hint VPD page causes these devices
> to reset. Hence do not read the IO hint VPD page from USB storage devices.

> Cc: Alan Stern <stern@rowland.harvard.edu>
> Cc: linux-usb@vger.kernel.org
> Cc: Joao Machado <jocrismachado@gmail.com>

> Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
> Cc: Christian Heusel <christian@heusel.eu>

Besides no need to repeat these Cc's in case there are other tags for
the same emails, can you move the rest of Cc's after the --- line
below? For you it will be the same effect, for many others the Git
history won't be polluted with this noise.
Bart Van Assche June 13, 2024, 6:10 p.m. UTC | #5
On 6/13/24 10:44 AM, Andy Shevchenko wrote:
> On Wed, Jun 12, 2024 at 6:53 PM Bart Van Assche <bvanassche@acm.org> wrote:
>>
>> 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 hint VPD page causes these devices
>> to reset. Hence do not read the IO hint VPD page from USB storage devices.
> 
>> Cc: Alan Stern <stern@rowland.harvard.edu>
>> Cc: linux-usb@vger.kernel.org
>> Cc: Joao Machado <jocrismachado@gmail.com>
> 
>> Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
>> Cc: Christian Heusel <christian@heusel.eu>
> 
> Besides no need to repeat these Cc's in case there are other tags for
> the same emails, can you move the rest of Cc's after the --- line
> below? For you it will be the same effect, for many others the Git
> history won't be polluted with this noise.

I will leave out the redundant Cc's but I'm surprised by the request to move
Cc tags after the --- line. There are many patches with Cc: tags in Linus' tree.
I have never before seen anyone requesting to move Cc tags after the --- line.

Thanks,

Bart.
Andy Shevchenko June 13, 2024, 7:44 p.m. UTC | #6
On Thu, Jun 13, 2024 at 8:10 PM Bart Van Assche <bvanassche@acm.org> wrote:
> On 6/13/24 10:44 AM, Andy Shevchenko wrote:
> > On Wed, Jun 12, 2024 at 6:53 PM Bart Van Assche <bvanassche@acm.org> wrote:
> >>
> >> 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 hint VPD page causes these devices
> >> to reset. Hence do not read the IO hint VPD page from USB storage devices.
> >
> >> Cc: Alan Stern <stern@rowland.harvard.edu>
> >> Cc: linux-usb@vger.kernel.org
> >> Cc: Joao Machado <jocrismachado@gmail.com>
> >
> >> Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
> >> Cc: Christian Heusel <christian@heusel.eu>
> >
> > Besides no need to repeat these Cc's in case there are other tags for
> > the same emails, can you move the rest of Cc's after the --- line
> > below? For you it will be the same effect, for many others the Git
> > history won't be polluted with this noise.
>
> I will leave out the redundant Cc's but I'm surprised by the request to move
> Cc tags after the --- line. There are many patches with Cc: tags in Linus' tree.

I know, and that's why I am asking for them to be moved away. It's
just duplicate information and since we have lore.kernel.org, we may
always get the real message with the same data, no need to repeat this
in Git history.

> I have never before seen anyone requesting to move Cc tags after the --- line.
diff mbox series

Patch

diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c
index b31464740f6c..9a7185c68872 100644
--- a/drivers/usb/storage/scsiglue.c
+++ b/drivers/usb/storage/scsiglue.c
@@ -79,6 +79,8 @@  static int slave_alloc (struct scsi_device *sdev)
 	if (us->protocol == USB_PR_BULK && us->max_lun > 0)
 		sdev->sdev_bflags |= BLIST_FORCELUN;
 
+	sdev->sdev_bflags |= BLIST_SKIP_IO_HINTS;
+
 	return 0;
 }