1. 27 Feb, 2024 2 commits
  2. 15 Feb, 2024 5 commits
  3. 14 Feb, 2024 1 commit
    • Martin K. Petersen's avatar
      scsi: sd: usb_storage: uas: Access media prior to querying device properties · 321da3dc
      Martin K. Petersen authored
      It has been observed that some USB/UAS devices return generic properties
      hardcoded in firmware for mode pages for a period of time after a device
      has been discovered. The reported properties are either garbage or they do
      not accurately reflect the characteristics of the physical storage device
      attached in the case of a bridge.
      
      Prior to commit 1e029397 ("scsi: sd: Reorganize DIF/DIX code to
      avoid calling revalidate twice") we would call revalidate several
      times during device discovery. As a result, incorrect values would
      eventually get replaced with ones accurately describing the attached
      storage. When we did away with the redundant revalidate pass, several
      cases were reported where devices reported nonsensical values or would
      end up in write-protected state.
      
      An initial attempt at addressing this issue involved introducing a
      delayed second revalidate invocation. However, this approach still
      left some devices reporting incorrect characteristics.
      
      Tasos Sahanidis debugged the problem further and identified that
      introducing a READ operation prior to MODE SENSE fixed the problem and that
      it wasn't a timing issue. Issuing a READ appears to cause the devices to
      update their state to reflect the actual properties of the storage
      media. Device properties like vendor, model, and storage capacity appear to
      be correctly reported from the get-go. It is unclear why these devices
      defer populating the remaining characteristics.
      
      Match the behavior of a well known commercial operating system and
      trigger a READ operation prior to querying device characteristics to
      force the device to populate the mode pages.
      
      The additional READ is triggered by a flag set in the USB storage and
      UAS drivers. We avoid issuing the READ for other transport classes
      since some storage devices identify Linux through our particular
      discovery command sequence.
      
      Link: https://lore.kernel.org/r/20240213143306.2194237-1-martin.petersen@oracle.com
      Fixes: 1e029397 ("scsi: sd: Reorganize DIF/DIX code to avoid calling revalidate twice")
      Cc: stable@vger.kernel.org
      Reported-by: default avatarTasos Sahanidis <tasos@tasossah.com>
      Reviewed-by: default avatarEwan D. Milne <emilne@redhat.com>
      Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
      Tested-by: default avatarTasos Sahanidis <tasos@tasossah.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      321da3dc
  4. 13 Feb, 2024 3 commits
  5. 05 Feb, 2024 4 commits
  6. 24 Jan, 2024 2 commits
  7. 22 Jan, 2024 1 commit
  8. 21 Jan, 2024 22 commits