• Martin K. Petersen's avatar
    scsi: sd: Fix optimal I/O size for devices that change reported values · ea697a8b
    Martin K. Petersen authored
    Some USB bridge devices will return a default set of characteristics during
    initialization. And then, once an attached drive has spun up, substitute
    the actual parameters reported by the drive. According to the SCSI spec,
    the device should return a UNIT ATTENTION in case any reported parameters
    change. But in this case the change is made silently after a small window
    where default values are reported.
    
    Commit a83da8a4 ("scsi: sd: Optimal I/O size should be a multiple of
    physical block size") validated the reported optimal I/O size against the
    physical block size to overcome problems with devices reporting nonsensical
    transfer sizes. However, this validation did not account for the fact that
    aforementioned devices will return default values during a brief window
    during spin-up. The subsequent change in reported characteristics would
    invalidate the checking that had previously been performed.
    
    Unset a previously configured optimal I/O size should the sanity checking
    fail on subsequent revalidate attempts.
    
    Link: https://lore.kernel.org/r/33fb522e-4f61-1b76-914f-c9e6a3553c9b@gmail.com
    Cc: Bryan Gurney <bgurney@redhat.com>
    Cc: <stable@vger.kernel.org>
    Reported-by: default avatarBernhard Sulzer <micraft.b@gmail.com>
    Tested-by: default avatarBernhard Sulzer <micraft.b@gmail.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    ea697a8b
sd.c 97.9 KB