RE: [PATCH] scsi: core: Do not query the IO hints for a particular USB device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> Recently it was reported that Kingston DataTraveler G2 USB devices are unusable
> with 6.9.x kernels. Hence this patch that skips reading the IO hints VPD page for
> these USB devices.
> 
> Cc: Joao Machado <jocrismachado@xxxxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx
> Fixes: 4f53138fffc2 ("scsi: sd: Translate data lifetime information")
> Reported-by: Joao Machado <jocrismachado@xxxxxxxxx>
> Closes: https://lore.kernel.org/linux-
> scsi/CACLx9VdpUanftfPo2jVAqXdcWe8Y43MsDeZmMPooTzVaVJAh2w@xxxxxxxxx
> l.com/
> Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx>
> ---
>  drivers/scsi/scsi_devinfo.c | 1 +
>  drivers/scsi/sd.c           | 4 ++++
>  include/scsi/scsi_devinfo.h | 4 +++-
>  3 files changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c index
> a7071e71389e..85111e14c53b 100644
> --- a/drivers/scsi/scsi_devinfo.c
> +++ b/drivers/scsi/scsi_devinfo.c
> @@ -197,6 +197,7 @@ static struct {
>         {"INSITE", "I325VM", NULL, BLIST_KEY},
>         {"Intel", "Multi-Flex", NULL, BLIST_NO_RSOC},
>         {"iRiver", "iFP Mass Driver", NULL, BLIST_NOT_LOCKABLE |
> BLIST_INQUIRY_36},
> +       {"Kingston", "DataTraveler G2", NULL, BLIST_SKIP_IO_HINTS},
>         {"LASOUND", "CDX7405", "3.10", BLIST_MAX5LUN | BLIST_SINGLELUN},
>         {"Marvell", "Console", NULL, BLIST_SKIP_VPD_PAGES},
>         {"Marvell", "91xx Config", "1.01", BLIST_SKIP_VPD_PAGES}, diff --git
The comment above __initdata say:
"...
* Do not add to this list, use the command line or proc interface to add
 * to the scsi_dev_info_list. This table will eventually go away.
..."

Thanks,
Avri

> a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 3a43e2209751..fcf3d7730466
> 100644
> --- a/drivers/scsi/sd.c
> +++ b/drivers/scsi/sd.c
> @@ -63,6 +63,7 @@
>  #include <scsi/scsi_cmnd.h>
>  #include <scsi/scsi_dbg.h>
>  #include <scsi/scsi_device.h>
> +#include <scsi/scsi_devinfo.h>
>  #include <scsi/scsi_driver.h>
>  #include <scsi/scsi_eh.h>
>  #include <scsi/scsi_host.h>
> @@ -3117,6 +3118,9 @@ static void sd_read_io_hints(struct scsi_disk *sdkp,
> unsigned char *buffer)
>         struct scsi_mode_data data;
>         int res;
> 
> +       if (sdp->sdev_bflags & BLIST_SKIP_IO_HINTS)
> +               return;
> +
>         res = scsi_mode_sense(sdp, /*dbd=*/0x8, /*modepage=*/0x0a,
>                               /*subpage=*/0x05, buffer, SD_BUF_SIZE, SD_TIMEOUT,
>                               sdkp->max_retries, &data, &sshdr); diff --git
> a/include/scsi/scsi_devinfo.h b/include/scsi/scsi_devinfo.h index
> 6b548dc2c496..fa8721e49dec 100644
> --- a/include/scsi/scsi_devinfo.h
> +++ b/include/scsi/scsi_devinfo.h
> @@ -69,8 +69,10 @@
>  #define BLIST_RETRY_ITF                ((__force blist_flags_t)(1ULL << 32))
>  /* Always retry ABORTED_COMMAND with ASC 0xc1 */
>  #define BLIST_RETRY_ASC_C1     ((__force blist_flags_t)(1ULL << 33))
> +/* Do not read the I/O hints mode page */
> +#define BLIST_SKIP_IO_HINTS    ((__force blist_flags_t)(1ULL << 34))
> 
> -#define __BLIST_LAST_USED BLIST_RETRY_ASC_C1
> +#define __BLIST_LAST_USED BLIST_SKIP_IO_HINTS
> 
>  #define __BLIST_HIGH_UNUSED (~(__BLIST_LAST_USED | \
>                                (__force blist_flags_t) \






[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux