lkml.org 
[lkml]   [2013]   [Nov]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.10 01/74] usb-storage: add quirk for mandatory READ_CAPACITY_16
    Date
    3.10-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Oliver Neukum <oneukum@suse.de>

    commit 32c37fc30c52508711ea6a108cfd5855b8a07176 upstream.

    Some USB drive enclosures do not correctly report an
    overflow condition if they hold a drive with a capacity
    over 2TB and are confronted with a READ_CAPACITY_10.
    They answer with their capacity modulo 2TB.
    The generic layer cannot cope with that. It must be told
    to use READ_CAPACITY_16 from the beginning.

    Signed-off-by: Oliver Neukum <oneukum@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/usb/storage/scsiglue.c | 5 ++++-
    drivers/usb/storage/unusual_devs.h | 7 +++++++
    include/linux/usb_usual.h | 4 +++-
    3 files changed, 14 insertions(+), 2 deletions(-)

    --- a/drivers/usb/storage/scsiglue.c
    +++ b/drivers/usb/storage/scsiglue.c
    @@ -211,8 +211,11 @@ static int slave_configure(struct scsi_d
    /*
    * Many devices do not respond properly to READ_CAPACITY_16.
    * Tell the SCSI layer to try READ_CAPACITY_10 first.
    + * However some USB 3.0 drive enclosures return capacity
    + * modulo 2TB. Those must use READ_CAPACITY_16
    */
    - sdev->try_rc_10_first = 1;
    + if (!(us->fflags & US_FL_NEEDS_CAP16))
    + sdev->try_rc_10_first = 1;

    /* assume SPC3 or latter devices support sense size > 18 */
    if (sdev->scsi_level > SCSI_SPC_2)
    --- a/drivers/usb/storage/unusual_devs.h
    +++ b/drivers/usb/storage/unusual_devs.h
    @@ -1925,6 +1925,13 @@ UNUSUAL_DEV( 0x1652, 0x6600, 0x0201, 0x
    USB_SC_DEVICE, USB_PR_DEVICE, NULL,
    US_FL_IGNORE_RESIDUE ),

    +/* Reported by Oliver Neukum <oneukum@suse.com> */
    +UNUSUAL_DEV( 0x174c, 0x55aa, 0x0100, 0x0100,
    + "ASMedia",
    + "AS2105",
    + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
    + US_FL_NEEDS_CAP16),
    +
    /* Reported by Jesse Feddema <jdfeddema@gmail.com> */
    UNUSUAL_DEV( 0x177f, 0x0400, 0x0000, 0x0000,
    "Yarvik",
    --- a/include/linux/usb_usual.h
    +++ b/include/linux/usb_usual.h
    @@ -66,7 +66,9 @@
    US_FLAG(INITIAL_READ10, 0x00100000) \
    /* Initial READ(10) (and others) must be retried */ \
    US_FLAG(WRITE_CACHE, 0x00200000) \
    - /* Write Cache status is not available */
    + /* Write Cache status is not available */ \
    + US_FLAG(NEEDS_CAP16, 0x00400000)
    + /* cannot handle READ_CAPACITY_10 */

    #define US_FLAG(name, value) US_FL_##name = value ,
    enum { US_DO_ALL_FLAGS };



    \
     
     \ /
      Last update: 2013-11-09 08:21    [W:4.086 / U:0.252 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site