scsi: lpfc: Add more logging of cmd and cqe information for aborted NVMe cmds
authorJames Smart <jsmart2021@gmail.com>
Fri, 3 Jun 2022 17:43:27 +0000 (10:43 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 8 Jun 2022 01:38:18 +0000 (21:38 -0400)
When an NVMe command is aborted or completes with an ERSP, log the opcode
and command ID fields to help provide more detail on the failed command.

Link: https://lore.kernel.org/r/20220603174329.63777-8-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 88fa630..9cc22ce 100644 (file)
@@ -1065,25 +1065,37 @@ lpfc_nvme_io_cmd_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pwqeIn,
                        nCmd->rcv_rsplen = wcqe->parameter;
                        nCmd->status = 0;
 
+                       /* Get the NVME cmd details for this unique error. */
+                       cp = (struct nvme_fc_cmd_iu *)nCmd->cmdaddr;
+                       ep = (struct nvme_fc_ersp_iu *)nCmd->rspaddr;
+
                        /* 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);
+                                       "6084 NVME FCP_ERR ERSP: "
+                                       "xri %x placed x%x opcode x%x cmd_id "
+                                       "x%x cqe_status x%x\n",
+                                       lpfc_ncmd->cur_iocbq.sli4_xritag,
+                                       wcqe->total_data_placed,
+                                       cp->sqe.common.opcode,
+                                       cp->sqe.common.command_id,
+                                       ep->cqe.status);
                                break;
                        }
                        lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT,
                                         "6081 NVME Completion Protocol Error: "
                                         "xri %x status x%x result x%x "
-                                        "placed x%x\n",
+                                        "placed x%x opcode x%x cmd_id x%x, "
+                                        "cqe_status x%x\n",
                                         lpfc_ncmd->cur_iocbq.sli4_xritag,
                                         lpfc_ncmd->status, lpfc_ncmd->result,
-                                        wcqe->total_data_placed);
+                                        wcqe->total_data_placed,
+                                        cp->sqe.common.opcode,
+                                        cp->sqe.common.command_id,
+                                        ep->cqe.status);
                        break;
                case IOSTAT_LOCAL_REJECT:
                        /* Let fall through to set command final state. */
@@ -1842,6 +1854,7 @@ lpfc_nvme_fcp_abort(struct nvme_fc_local_port *pnvme_lport,
        struct lpfc_nvme_fcpreq_priv *freqpriv;
        unsigned long flags;
        int ret_val;
+       struct nvme_fc_cmd_iu *cp;
 
        /* Validate pointers. LLDD fault handling with transport does
         * have timing races.
@@ -1965,10 +1978,16 @@ lpfc_nvme_fcp_abort(struct nvme_fc_local_port *pnvme_lport,
                return;
        }
 
+       /*
+        * Get Command Id from cmd to plug into response. This
+        * code is not needed in the next NVME Transport drop.
+        */
+       cp = (struct nvme_fc_cmd_iu *)lpfc_nbuf->nvmeCmd->cmdaddr;
        lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_ABTS,
                         "6138 Transport Abort NVME Request Issued for "
-                        "ox_id x%x\n",
-                        nvmereq_wqe->sli4_xritag);
+                        "ox_id x%x nvme opcode x%x nvme cmd_id x%x\n",
+                        nvmereq_wqe->sli4_xritag, cp->sqe.common.opcode,
+                        cp->sqe.common.command_id);
        return;
 
 out_unlock: