scsi: lpfc: Treat IOERR_SLI_DOWN I/O completion status the same as pci offline
authorJustin Tee <justin.tee@broadcom.com>
Mon, 9 Oct 2023 16:18:08 +0000 (09:18 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 13 Oct 2023 20:58:27 +0000 (16:58 -0400)
During receipt of a hardware error attention ACQE, IOERR_SLI_DOWN status is
set by the driver for all outstanding I/Os.

In such hardware error attention cases, we can treat the situation exactly
the same as pci_channel_offline.  Thus, add IOERR_SLI_DOWN status to the
same category as pci_channel_offline handling in lpfc_nvme_io_cmd_cmpl.

Signed-off-by: Justin Tee <justin.tee@broadcom.com>
Link: https://lore.kernel.org/r/20231009161812.97232-3-justintee8345@gmail.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/lpfc/lpfc_nvme.c

index 39acbcb7ec66a12e246ed3f92699fa5afe430c7e..8f750d7d9d95caf14106a40fc38d8c04a23421e8 100644 (file)
@@ -951,7 +951,7 @@ lpfc_nvme_io_cmd_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pwqeIn,
 #ifdef CONFIG_SCSI_LPFC_DEBUG_FS
        int cpu;
 #endif
-       int offline = 0;
+       bool offline = false;
 
        /* Sanity check on return of outstanding command */
        if (!lpfc_ncmd) {
@@ -1125,7 +1125,9 @@ out_err:
                        nCmd->transferred_length = 0;
                        nCmd->rcv_rsplen = 0;
                        nCmd->status = NVME_SC_INTERNAL;
-                       offline = pci_channel_offline(vport->phba->pcidev);
+                       if (pci_channel_offline(vport->phba->pcidev) ||
+                           lpfc_ncmd->result == IOERR_SLI_DOWN)
+                               offline = true;
                }
        }