All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3] scsi: libsas: add lun number check in .slave_alloc callback
@ 2021-06-22  3:40 Yufen Yu
  2021-06-22  7:20 ` John Garry
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Yufen Yu @ 2021-06-22  3:40 UTC (permalink / raw)
  To: jejb, martin.petersen, john.garry; +Cc: linux-scsi, yanaijie, Yufen Yu, Wu Bo

We found that offline a sata device on hisi sas control and then
scanning the host can probe 255 not-existant devices into system.

[root@localhost ~]# 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

 1) echo "offline" > /sys/block/sdb/device/state
 2) echo "- - -" > /sys/class/scsi_host/host2/scan

Then, we can see another 255 non-existant devices in system:
  [root@localhost ~]# 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 REPORT LUN command issued to the offline device fail, it tries
to do a sequential scan and probe all devices whose lun is not 0
successfully.

To fix the problem, we try to do same things as commit 2fc62e2ac350
("[SCSI] libsas: disable scanning lun > 0 on ata devices"), which
will prevent the device whose lun number is not zero probe into system.

Reported-by: Wu Bo <wubo40@huawei.com>
Suggested-by: John Garry <john.garry@huawei.com>
Signed-off-by: Yufen Yu <yuyufen@huawei.com>
---
 drivers/scsi/aic94xx/aic94xx_init.c    | 1 +
 drivers/scsi/hisi_sas/hisi_sas_v1_hw.c | 1 +
 drivers/scsi/hisi_sas/hisi_sas_v2_hw.c | 1 +
 drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 1 +
 drivers/scsi/isci/init.c               | 1 +
 drivers/scsi/libsas/sas_scsi_host.c    | 9 +++++++++
 drivers/scsi/mvsas/mv_init.c           | 1 +
 drivers/scsi/pm8001/pm8001_init.c      | 1 +
 8 files changed, 16 insertions(+)

v2->v3:
    simplify commit log and fix some spelling error

diff --git a/drivers/scsi/aic94xx/aic94xx_init.c b/drivers/scsi/aic94xx/aic94xx_init.c
index a195bfe9eccc..7a78606598c4 100644
--- a/drivers/scsi/aic94xx/aic94xx_init.c
+++ b/drivers/scsi/aic94xx/aic94xx_init.c
@@ -53,6 +53,7 @@ static struct scsi_host_template aic94xx_sht = {
 	.max_sectors		= SCSI_DEFAULT_MAX_SECTORS,
 	.eh_device_reset_handler	= sas_eh_device_reset_handler,
 	.eh_target_reset_handler	= sas_eh_target_reset_handler,
+	.slave_alloc		= sas_slave_alloc,
 	.target_destroy		= sas_target_destroy,
 	.ioctl			= sas_ioctl,
 #ifdef CONFIG_COMPAT
diff --git a/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c
index 3e359ac752fd..15eaac3a4eb6 100644
--- a/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c
+++ b/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c
@@ -1771,6 +1771,7 @@ static struct scsi_host_template sht_v1_hw = {
 	.max_sectors		= SCSI_DEFAULT_MAX_SECTORS,
 	.eh_device_reset_handler = sas_eh_device_reset_handler,
 	.eh_target_reset_handler = sas_eh_target_reset_handler,
+	.slave_alloc		= sas_slave_alloc,
 	.target_destroy		= sas_target_destroy,
 	.ioctl			= sas_ioctl,
 #ifdef CONFIG_COMPAT
diff --git a/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c
index 46f60fc2a069..9df1639ffa65 100644
--- a/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c
+++ b/drivers/scsi/hisi_sas/hisi_sas_v2_hw.c
@@ -3584,6 +3584,7 @@ static struct scsi_host_template sht_v2_hw = {
 	.max_sectors		= SCSI_DEFAULT_MAX_SECTORS,
 	.eh_device_reset_handler = sas_eh_device_reset_handler,
 	.eh_target_reset_handler = sas_eh_target_reset_handler,
+	.slave_alloc		= sas_slave_alloc,
 	.target_destroy		= sas_target_destroy,
 	.ioctl			= sas_ioctl,
 #ifdef CONFIG_COMPAT
diff --git a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
index e95408314078..36ec3901cfd4 100644
--- a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
+++ b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
@@ -3155,6 +3155,7 @@ static struct scsi_host_template sht_v3_hw = {
 	.max_sectors		= SCSI_DEFAULT_MAX_SECTORS,
 	.eh_device_reset_handler = sas_eh_device_reset_handler,
 	.eh_target_reset_handler = sas_eh_target_reset_handler,
+	.slave_alloc		= sas_slave_alloc,
 	.target_destroy		= sas_target_destroy,
 	.ioctl			= sas_ioctl,
 #ifdef CONFIG_COMPAT
diff --git a/drivers/scsi/isci/init.c b/drivers/scsi/isci/init.c
index c452849e7bb4..ffd33e5decae 100644
--- a/drivers/scsi/isci/init.c
+++ b/drivers/scsi/isci/init.c
@@ -167,6 +167,7 @@ static struct scsi_host_template isci_sht = {
 	.eh_abort_handler		= sas_eh_abort_handler,
 	.eh_device_reset_handler        = sas_eh_device_reset_handler,
 	.eh_target_reset_handler        = sas_eh_target_reset_handler,
+	.slave_alloc			= sas_slave_alloc,
 	.target_destroy			= sas_target_destroy,
 	.ioctl				= sas_ioctl,
 #ifdef CONFIG_COMPAT
diff --git a/drivers/scsi/libsas/sas_scsi_host.c b/drivers/scsi/libsas/sas_scsi_host.c
index 1bf939818c98..ee44a0d7730b 100644
--- a/drivers/scsi/libsas/sas_scsi_host.c
+++ b/drivers/scsi/libsas/sas_scsi_host.c
@@ -911,6 +911,14 @@ void sas_task_abort(struct sas_task *task)
 		blk_abort_request(sc->request);
 }
 
+int sas_slave_alloc(struct scsi_device *sdev)
+{
+	if (dev_is_sata(sdev_to_domain_dev(sdev)) && sdev->lun)
+		return -ENXIO;
+
+	return 0;
+}
+
 void sas_target_destroy(struct scsi_target *starget)
 {
 	struct domain_device *found_dev = starget->hostdata;
@@ -957,5 +965,6 @@ EXPORT_SYMBOL_GPL(sas_task_abort);
 EXPORT_SYMBOL_GPL(sas_phy_reset);
 EXPORT_SYMBOL_GPL(sas_eh_device_reset_handler);
 EXPORT_SYMBOL_GPL(sas_eh_target_reset_handler);
+EXPORT_SYMBOL_GPL(sas_slave_alloc);
 EXPORT_SYMBOL_GPL(sas_target_destroy);
 EXPORT_SYMBOL_GPL(sas_ioctl);
diff --git a/drivers/scsi/mvsas/mv_init.c b/drivers/scsi/mvsas/mv_init.c
index 6aa2697c4a15..b03c0f35d7b0 100644
--- a/drivers/scsi/mvsas/mv_init.c
+++ b/drivers/scsi/mvsas/mv_init.c
@@ -46,6 +46,7 @@ static struct scsi_host_template mvs_sht = {
 	.max_sectors		= SCSI_DEFAULT_MAX_SECTORS,
 	.eh_device_reset_handler = sas_eh_device_reset_handler,
 	.eh_target_reset_handler = sas_eh_target_reset_handler,
+	.slave_alloc		= sas_slave_alloc,
 	.target_destroy		= sas_target_destroy,
 	.ioctl			= sas_ioctl,
 #ifdef CONFIG_COMPAT
diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001_init.c
index af09bd282cb9..313248c7bab9 100644
--- a/drivers/scsi/pm8001/pm8001_init.c
+++ b/drivers/scsi/pm8001/pm8001_init.c
@@ -101,6 +101,7 @@ static struct scsi_host_template pm8001_sht = {
 	.max_sectors		= SCSI_DEFAULT_MAX_SECTORS,
 	.eh_device_reset_handler = sas_eh_device_reset_handler,
 	.eh_target_reset_handler = sas_eh_target_reset_handler,
+	.slave_alloc		= sas_slave_alloc,
 	.target_destroy		= sas_target_destroy,
 	.ioctl			= sas_ioctl,
 #ifdef CONFIG_COMPAT
-- 
2.25.4


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v3] scsi: libsas: add lun number check in .slave_alloc callback
  2021-06-22  3:40 [PATCH v3] scsi: libsas: add lun number check in .slave_alloc callback Yufen Yu
@ 2021-06-22  7:20 ` John Garry
  2021-06-22  9:15   ` Jason Yan
  2021-06-22  9:17 ` Jason Yan
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 7+ messages in thread
From: John Garry @ 2021-06-22  7:20 UTC (permalink / raw)
  To: Yufen Yu, jejb, martin.petersen; +Cc: linux-scsi, yanaijie, Wu Bo

On 22/06/2021 04:40, Yufen Yu wrote:
> We found that offline a sata device on hisi sas control and then

/s/sata/SATA/

/s/control/controller/

> scanning the host can probe 255 not-existant devices into system.
> 
> [root@localhost ~]# 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
> 
>   1) echo "offline" > /sys/block/sdb/device/state
>   2) echo "- - -" > /sys/class/scsi_host/host2/scan
> 
> Then, we can see another 255 non-existant devices in system:
>    [root@localhost ~]# 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 REPORT LUN command issued to the offline device fail, it tries
> to do a sequential scan and probe all devices whose lun is not 0
> successfully.
> 
> To fix the problem, we try to do same things as commit 2fc62e2ac350
> ("[SCSI] libsas: disable scanning lun > 0 on ata devices"), which
> will prevent the device whose lun number is not zero probe into system.
> 

I thought that we would mention why we don't change aic7xxx driver.

> Reported-by: Wu Bo<wubo40@huawei.com>
> Suggested-by: John Garry<john.garry@huawei.com>
> Signed-off-by: Yufen Yu<yuyufen@huawei.com>
> ---

Apart from the small items above:
Reviewed-by: John Garry <john.garry@huawei.com>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v3] scsi: libsas: add lun number check in .slave_alloc callback
  2021-06-22  7:20 ` John Garry
@ 2021-06-22  9:15   ` Jason Yan
  2021-06-22  9:18     ` John Garry
  0 siblings, 1 reply; 7+ messages in thread
From: Jason Yan @ 2021-06-22  9:15 UTC (permalink / raw)
  To: John Garry, Yufen Yu, jejb, martin.petersen; +Cc: linux-scsi, Wu Bo


在 2021/6/22 15:20, John Garry 写道:
> On 22/06/2021 04:40, Yufen Yu wrote:
>> We found that offline a sata device on hisi sas control and then
> 
> /s/sata/SATA/
> 
> /s/control/controller/
> 
>> scanning the host can probe 255 not-existant devices into system.
>>
>> [root@localhost ~]# 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
>>
>>   1) echo "offline" > /sys/block/sdb/device/state
>>   2) echo "- - -" > /sys/class/scsi_host/host2/scan
>>
>> Then, we can see another 255 non-existant devices in system:
>>    [root@localhost ~]# 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 REPORT LUN command issued to the offline device fail, it tries
>> to do a sequential scan and probe all devices whose lun is not 0
>> successfully.
>>
>> To fix the problem, we try to do same things as commit 2fc62e2ac350
>> ("[SCSI] libsas: disable scanning lun > 0 on ata devices"), which
>> will prevent the device whose lun number is not zero probe into system.
>>
> 
> I thought that we would mention why we don't change aic7xxx driver.

We are talking about libsas here. aic7xxx is not even a libsas driver,
so I don't think we need to mention it.

Thanks,
Jason

> 
>> Reported-by: Wu Bo<wubo40@huawei.com>
>> Suggested-by: John Garry<john.garry@huawei.com>
>> Signed-off-by: Yufen Yu<yuyufen@huawei.com>
>> ---
> 
> Apart from the small items above:
> Reviewed-by: John Garry <john.garry@huawei.com>
> .

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v3] scsi: libsas: add lun number check in .slave_alloc callback
  2021-06-22  3:40 [PATCH v3] scsi: libsas: add lun number check in .slave_alloc callback Yufen Yu
  2021-06-22  7:20 ` John Garry
@ 2021-06-22  9:17 ` Jason Yan
  2021-06-23  1:33 ` Martin K. Petersen
  2021-06-29  4:10 ` Martin K. Petersen
  3 siblings, 0 replies; 7+ messages in thread
From: Jason Yan @ 2021-06-22  9:17 UTC (permalink / raw)
  To: Yufen Yu, jejb, martin.petersen, john.garry; +Cc: linux-scsi, Wu Bo


在 2021/6/22 11:40, Yufen Yu 写道:
> We found that offline a sata device on hisi sas control and then
> scanning the host can probe 255 not-existant devices into system.
> 
> [root@localhost ~]# 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
> 
>   1) echo "offline" > /sys/block/sdb/device/state
>   2) echo "- - -" > /sys/class/scsi_host/host2/scan
> 
> Then, we can see another 255 non-existant devices in system:
>    [root@localhost ~]# 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 REPORT LUN command issued to the offline device fail, it tries
> to do a sequential scan and probe all devices whose lun is not 0
> successfully.
> 
> To fix the problem, we try to do same things as commit 2fc62e2ac350
> ("[SCSI] libsas: disable scanning lun > 0 on ata devices"), which
> will prevent the device whose lun number is not zero probe into system.
> 
> Reported-by: Wu Bo <wubo40@huawei.com>
> Suggested-by: John Garry <john.garry@huawei.com>
> Signed-off-by: Yufen Yu <yuyufen@huawei.com>
> ---

Reviewed-by: Jason Yan <yanaijie@huawei.com>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v3] scsi: libsas: add lun number check in .slave_alloc callback
  2021-06-22  9:15   ` Jason Yan
@ 2021-06-22  9:18     ` John Garry
  0 siblings, 0 replies; 7+ messages in thread
From: John Garry @ 2021-06-22  9:18 UTC (permalink / raw)
  To: Jason Yan, Yufen Yu, jejb, martin.petersen; +Cc: linux-scsi, Wu Bo

On 22/06/2021 10:15, Jason Yan wrote:
>>
>> I thought that we would mention why we don't change aic7xxx driver.
> 
> We are talking about libsas here. aic7xxx is not even a libsas driver,
> so I don't think we need to mention it.

Ah, right. I don't know why it was mentioned when we were talking about 
the v2 of this patch.

Thanks,
John

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v3] scsi: libsas: add lun number check in .slave_alloc callback
  2021-06-22  3:40 [PATCH v3] scsi: libsas: add lun number check in .slave_alloc callback Yufen Yu
  2021-06-22  7:20 ` John Garry
  2021-06-22  9:17 ` Jason Yan
@ 2021-06-23  1:33 ` Martin K. Petersen
  2021-06-29  4:10 ` Martin K. Petersen
  3 siblings, 0 replies; 7+ messages in thread
From: Martin K. Petersen @ 2021-06-23  1:33 UTC (permalink / raw)
  To: Yufen Yu; +Cc: jejb, martin.petersen, john.garry, linux-scsi, yanaijie, Wu Bo


Yufen,

> We found that offline a sata device on hisi sas control and then
> scanning the host can probe 255 not-existant devices into system.

Applied to 5.14/scsi-staging, thanks!

-- 
Martin K. Petersen	Oracle Linux Engineering

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v3] scsi: libsas: add lun number check in .slave_alloc callback
  2021-06-22  3:40 [PATCH v3] scsi: libsas: add lun number check in .slave_alloc callback Yufen Yu
                   ` (2 preceding siblings ...)
  2021-06-23  1:33 ` Martin K. Petersen
@ 2021-06-29  4:10 ` Martin K. Petersen
  3 siblings, 0 replies; 7+ messages in thread
From: Martin K. Petersen @ 2021-06-29  4:10 UTC (permalink / raw)
  To: Yufen Yu, jejb, john.garry
  Cc: Martin K . Petersen, linux-scsi, yanaijie, Wu Bo

On Tue, 22 Jun 2021 11:40:37 +0800, Yufen Yu wrote:

> We found that offline a sata device on hisi sas control and then
> scanning the host can probe 255 not-existant devices into system.
> 
> [root@localhost ~]# 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
> 
> [...]

Applied to 5.14/scsi-queue, thanks!

[1/1] scsi: libsas: add lun number check in .slave_alloc callback
      https://git.kernel.org/mkp/scsi/c/49da96d77938

-- 
Martin K. Petersen	Oracle Linux Engineering

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2021-06-29  4:10 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-22  3:40 [PATCH v3] scsi: libsas: add lun number check in .slave_alloc callback Yufen Yu
2021-06-22  7:20 ` John Garry
2021-06-22  9:15   ` Jason Yan
2021-06-22  9:18     ` John Garry
2021-06-22  9:17 ` Jason Yan
2021-06-23  1:33 ` Martin K. Petersen
2021-06-29  4:10 ` Martin K. Petersen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.