scsi: hisi_sas: Directly trigger SCSI error handling for completion errors
authorLuo Jiaxing <luojiaxing@huawei.com>
Mon, 13 Jul 2020 08:04:30 +0000 (16:04 +0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 14 Jul 2020 03:32:28 +0000 (23:32 -0400)
Abort failed commands in completion path. This avoids having to wait for
block layer timeouts and triggering the SCSI error handling thread.

Link: https://lore.kernel.org/r/1594627471-235395-2-git-send-email-john.garry@huawei.com
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_v1_hw.c
drivers/scsi/hisi_sas/hisi_sas_v2_hw.c
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c

index 2e1718f..53e1f51 100644 (file)
@@ -1258,8 +1258,10 @@ static void slot_complete_v1_hw(struct hisi_hba *hisi_hba,
                !(cmplt_hdr_data & CMPLT_HDR_RSPNS_XFRD_MSK)) {
 
                slot_err_v1_hw(hisi_hba, task, slot);
-               if (unlikely(slot->abort))
+               if (unlikely(slot->abort)) {
+                       sas_task_abort(task);
                        return;
+               }
                goto out;
        }
 
index e7e7849..4151b2c 100644 (file)
@@ -2404,8 +2404,10 @@ static void slot_complete_v2_hw(struct hisi_hba *hisi_hba,
                                 error_info[0], error_info[1],
                                 error_info[2], error_info[3]);
 
-               if (unlikely(slot->abort))
+               if (unlikely(slot->abort)) {
+                       sas_task_abort(task);
                        return;
+               }
                goto out;
        }
 
index 3e6b78a..d2488d2 100644 (file)
@@ -2235,8 +2235,10 @@ static void slot_complete_v3_hw(struct hisi_hba *hisi_hba,
                                 dw0, dw1, complete_hdr->act, dw3,
                                 error_info[0], error_info[1],
                                 error_info[2], error_info[3]);
-               if (unlikely(slot->abort))
+               if (unlikely(slot->abort)) {
+                       sas_task_abort(task);
                        return;
+               }
                goto out;
        }