linux/drivers/scsi/aic94xx
Yufen Yu 49da96d779 scsi: libsas: Add LUN number check in .slave_alloc callback
Offlining a SATA device connected to a hisi SAS controller and then
scanning the host will result in detecting 255 non-existent devices:

  # lsscsi
  [2:0:0:0]    disk    ATA      Samsung SSD 860  2B6Q  /dev/sda
  [2:0:1:0]    disk    ATA      WDC WD2003FYYS-3 1D01  /dev/sdb
  [2:0:2:0]    disk    SEAGATE  ST600MM0006      B001  /dev/sdc
  # echo "offline" > /sys/block/sdb/device/state
  # echo "- - -" > /sys/class/scsi_host/host2/scan
  # lsscsi
  [2:0:0:0]    disk    ATA      Samsung SSD 860  2B6Q  /dev/sda
  [2:0:1:0]    disk    ATA      WDC WD2003FYYS-3 1D01  /dev/sdb
  [2:0:1:1]    disk    ATA      WDC WD2003FYYS-3 1D01  /dev/sdh
  ...
  [2:0:1:255]  disk    ATA      WDC WD2003FYYS-3 1D01  /dev/sdjb

After a REPORT LUN command issued to the offline device fails, the SCSI
midlayer tries to do a sequential scan of all devices whose LUN number is
not 0. However, SATA does not support LUN numbers at all.

Introduce a generic sas_slave_alloc() handler which will return -ENXIO for
SATA devices if the requested LUN number is larger than 0 and make libsas
drivers use this function as their .slave_alloc callback.

Link: https://lore.kernel.org/r/20210622034037.1467088-1-yuyufen@huawei.com
Reported-by: Wu Bo <wubo40@huawei.com>
Suggested-by: John Garry <john.garry@huawei.com>
Reviewed-by: John Garry <john.garry@huawei.com>
Reviewed-by: Jason Yan <yanaijie@huawei.com>
Signed-off-by: Yufen Yu <yuyufen@huawei.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2021-06-22 21:33:33 -04:00
..
aic94xx_dev.c scsi: aic94xx: Fix a couple of kerneldoc formatting issues 2020-07-24 22:09:58 -04:00
aic94xx_dump.c scsi: aic94xx: Correct misspelling of function asd_dump_seq_state() 2021-03-18 23:35:54 -04:00
aic94xx_dump.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 411 2019-06-05 17:37:14 +02:00
aic94xx_hwi.c scsi: aic94xx: Fix a couple of misnamed function names 2021-03-15 22:14:50 -04:00
aic94xx_hwi.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 411 2019-06-05 17:37:14 +02:00
aic94xx_init.c scsi: libsas: Add LUN number check in .slave_alloc callback 2021-06-22 21:33:33 -04:00
aic94xx_reg_def.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 411 2019-06-05 17:37:14 +02:00
aic94xx_reg.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 411 2019-06-05 17:37:14 +02:00
aic94xx_reg.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 411 2019-06-05 17:37:14 +02:00
aic94xx_sas.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 411 2019-06-05 17:37:14 +02:00
aic94xx_scb.c scsi: aic94xx: Switch back to original libsas event notifiers 2021-01-22 21:31:09 -05:00
aic94xx_sds.c scsi: aic94xx: Fix asd_erase_nv_sector()'s header 2021-03-15 22:14:51 -04:00
aic94xx_sds.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 411 2019-06-05 17:37:14 +02:00
aic94xx_seq.c scsi: aic94xx: Document 'lseq' and repair asd_update_port_links() header 2020-07-15 17:25:12 -04:00
aic94xx_seq.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 411 2019-06-05 17:37:14 +02:00
aic94xx_task.c scsi: libsas: Introduce more SAM status code aliases in enum exec_status 2021-06-02 16:10:46 -04:00
aic94xx_tmf.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
aic94xx.h scsi: aic94xx: Avoid -Wempty-body warning 2021-04-01 22:55:25 -04:00
Kconfig treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 457 2019-06-19 17:09:09 +02:00
Makefile treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 411 2019-06-05 17:37:14 +02:00