scsi: lpfc: Fix non-optimized ERSP handling
authorJames Smart <jsmart2021@gmail.com>
Fri, 14 May 2021 19:55:50 +0000 (12:55 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sat, 22 May 2021 03:23:27 +0000 (23:23 -0400)
When processing an NVMe ERSP IU which didn't match the optimized CQE-only
path, the status was being left to the WQE status. WQE status is non-zero
as it is indicating a non-optimized completion that needs to be handled by
the driver.

Fix by clearing the status field when falling into the non-optimized
case. Log message added to track optimized vs non-optimized debug.

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

index 41e49f61fac2c2b9f1b6ed6cc26b4d478e58aee6..bcc804cefd30b9b2b33b4bd78f4387dcee3ce14b 100644 (file)
@@ -1049,9 +1049,19 @@ lpfc_nvme_io_cmd_wqe_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pwqeIn,
                        nCmd->transferred_length = wcqe->total_data_placed;
                        nCmd->rcv_rsplen = wcqe->parameter;
                        nCmd->status = 0;
-                       /* Sanity check */
-                       if (nCmd->rcv_rsplen == LPFC_NVME_ERSP_LEN)
+
+                       /* Check if this is really an ERSP */
+                       if (nCmd->rcv_rsplen == LPFC_NVME_ERSP_LEN) {
+                               lpfc_ncmd->status = IOSTAT_SUCCESS;
+                               lpfc_ncmd->result = 0;
+
+                               lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME,
+                                        "6084 NVME Completion ERSP: "
+                                        "xri %x placed x%x\n",
+                                        lpfc_ncmd->cur_iocbq.sli4_xritag,
+                                        wcqe->total_data_placed);
                                break;
+                       }
                        lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT,
                                         "6081 NVME Completion Protocol Error: "
                                         "xri %x status x%x result x%x "