Skip to content
  1. May 30, 2023
    • Damien Le Moal's avatar
      ata: libata-scsi: Use correct device no in ata_find_dev() · 7f875850
      Damien Le Moal authored
      
      
      For devices not attached to a port multiplier and managed directly by
      libata, the device number passed to ata_find_dev() must always be lower
      than the maximum number of devices returned by ata_link_max_devices().
      That is 1 for SATA devices or 2 for an IDE link with master+slave
      devices. This device number is the SCSI device ID which matches these
      constraints as the IDs are generated per port and so never exceed the
      maximum number of devices for the link being used.
      
      However, for libsas managed devices, SCSI device IDs are assigned per
      struct scsi_host, leading to device IDs for SATA devices that can be
      well in excess of libata per-link maximum number of devices. This
      results in ata_find_dev() to always return NULL for libsas managed
      devices except for the first device of the target scsi_host with ID
      (device number) equal to 0. This issue is visible by executing the
      hdparm utility, which fails. E.g.:
      
      hdparm -i /dev/sdX
      /dev/sdX:
        HDIO_GET_IDENTITY failed: No message of desired type
      
      Fix this by rewriting ata_find_dev() to ignore the device number for
      non-PMP attached devices with a link with at most 1 device, that is SATA
      devices. For these, the device number 0 is always used to
      return the correct pointer to the struct ata_device of the port link.
      This change excludes IDE master/slave setups (maximum number of devices
      per link is 2) and port-multiplier attached devices. Also, to be
      consistant with the fact that SCSI device IDs and channel numbers used
      as device numbers are both unsigned int, change the devno argument of
      ata_find_dev() to unsigned int.
      
      Reported-by: default avatarXingui Yang <yangxingui@huawei.com>
      Fixes: 41bda9c9 ("libata-link: update hotplug to handle PMP links")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarDamien Le Moal <dlemoal@kernel.org>
      Reviewed-by: default avatarJason Yan <yanaijie@huawei.com>
      7f875850
  2. May 15, 2023
  3. May 14, 2023
  4. May 13, 2023
  5. May 12, 2023