From: Luo Jiaxing <luojiax...@huawei.com>

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 <luojiax...@huawei.com>
Signed-off-by: John Garry <john.ga...@huawei.com>
---
 drivers/scsi/hisi_sas/hisi_sas_main.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c 
b/drivers/scsi/hisi_sas/hisi_sas_main.c
index ede812759991..c02cf78a20c7 100644
--- a/drivers/scsi/hisi_sas/hisi_sas_main.c
+++ b/drivers/scsi/hisi_sas/hisi_sas_main.c
@@ -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;
-- 
2.17.1

Reply via email to