mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2025-12-03 09:36:01 +00:00
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> |
||
|---|---|---|
| .. | ||
| host.c | ||
| host.h | ||
| init.c | ||
| isci.h | ||
| Makefile | ||
| phy.c | ||
| phy.h | ||
| port_config.c | ||
| port.c | ||
| port.h | ||
| probe_roms.c | ||
| probe_roms.h | ||
| registers.h | ||
| remote_device.c | ||
| remote_device.h | ||
| remote_node_context.c | ||
| remote_node_context.h | ||
| remote_node_table.c | ||
| remote_node_table.h | ||
| request.c | ||
| request.h | ||
| sas.h | ||
| scu_completion_codes.h | ||
| scu_event_codes.h | ||
| scu_remote_node_context.h | ||
| scu_task_context.h | ||
| task.c | ||
| task.h | ||
| unsolicited_frame_control.c | ||
| unsolicited_frame_control.h | ||