scsi: hisi_sas: Don't hard reset disk during controller reset
authorLuo Jiaxing <luojiaxing@huawei.com>
Thu, 11 Apr 2019 12:46:42 +0000 (20:46 +0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sat, 13 Apr 2019 01:30:12 +0000 (21:30 -0400)
In the function of hisi_sas_init_device(), we added ops->hardreset() to
clear affiliation of STP target port or handle [STP pending] state.

Function hisi_sas_init_device() will be called when a device is found or
during controller reset. At controller reset, we call
hisi_sas_init_device() to re-init the disks, so calling hardreset() is
unnecessary and it also will cause some delay at controller reset.

Signed-off-by: Luo Jiaxing <luojiaxing@huawei.com>
Signed-off-by: John Garry <john.garry@huawei.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/hisi_sas/hisi_sas_main.c

index ede812759991d2b006d6d0170c110ce876c5b574..c02cf78a20c7ebcfc218ebfb8365c146d567b42e 100644 (file)
@@ -754,7 +754,8 @@ static int hisi_sas_init_device(struct domain_device *device)
                 * STP target port
                 */
                local_phy = sas_get_local_phy(device);
-               if (!scsi_is_sas_phy_local(local_phy)) {
+               if (!scsi_is_sas_phy_local(local_phy) &&
+                   !test_bit(HISI_SAS_RESET_BIT, &hisi_hba->flags)) {
                        unsigned long deadline = ata_deadline(jiffies, 20000);
                        struct sata_device *sata_dev = &device->sata_dev;
                        struct ata_host *ata_host = sata_dev->ata_host;