• Alan Stern's avatar
    usb-storage: redo incorrect reads · 21c13a4f
    Alan Stern authored
    Some USB mass-storage devices have bugs that cause them not to handle
    the first READ(10) command they receive correctly.  The Corsair
    Padlock v2 returns completely bogus data for its first read (possibly
    it returns the data in encrypted form even though the device is
    supposed to be unlocked).  The Feiya SD/SDHC card reader fails to
    complete the first READ(10) command after it is plugged in or after a
    new card is inserted, returning a status code that indicates it thinks
    the command was invalid, which prevents the kernel from retrying the
    read.
    
    Since the first read of a new device or a new medium is for the
    partition sector, the kernel is unable to retrieve the device's
    partition table.  Users have to manually issue an "hdparm -z" or
    "blockdev --rereadpt" command before they can access the device.
    
    This patch (as1470) works around the problem.  It adds a new quirk
    flag, US_FL_INVALID_READ10, indicating that the first READ(10) should
    always be retried immediately, as should any failing READ(10) commands
    (provided the preceding READ(10) command succeeded, to avoid getting
    stuck in a loop).  The patch also adds appropriate unusual_devs
    entries containing the new flag.
    Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
    Tested-by: default avatarSven Geggus <sven-usbst@geggus.net>
    Tested-by: default avatarPaul Hartman <paul.hartman+linux@gmail.com>
    CC: Matthew Dharm <mdharm-usb@one-eyed-alien.net>
    CC: <stable@kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    21c13a4f
usb_usual.h 3.28 KB