scsi: lpfc: Fix up log messages and stats counters in IO submit code path
authorJames Smart <jsmart2021@gmail.com>
Sat, 5 May 2018 03:37:56 +0000 (20:37 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 8 May 2018 05:03:16 +0000 (01:03 -0400)
Fix up log messages and add an fcp error stat counter in the IO submit
code path to make diagnosing problems easier

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/lpfc/lpfc_attr.c
drivers/scsi/lpfc/lpfc_debugfs.c
drivers/scsi/lpfc/lpfc_nvme.c
drivers/scsi/lpfc/lpfc_nvme.h

index fd3b253..e797245 100644 (file)
@@ -405,11 +405,12 @@ lpfc_nvme_info_show(struct device *dev, struct device_attribute *attr,
 
        len += snprintf(buf+len, PAGE_SIZE-len,
                        "      abort %08x noxri %08x nondlp %08x qdepth %08x "
-                       "wqerr %08x\n",
+                       "wqerr %08x err %08x\n",
                        atomic_read(&lport->xmt_fcp_abort),
                        atomic_read(&lport->xmt_fcp_noxri),
                        atomic_read(&lport->xmt_fcp_bad_ndlp),
                        atomic_read(&lport->xmt_fcp_qdepth),
+                       atomic_read(&lport->xmt_fcp_err),
                        atomic_read(&lport->xmt_fcp_wqerr));
 
        len += snprintf(buf + len, PAGE_SIZE - len,
index afe7883..ccc3422 100644 (file)
@@ -959,11 +959,12 @@ lpfc_debugfs_nvmestat_data(struct lpfc_vport *vport, char *buf, int size)
 
                len += snprintf(buf + len, size - len,
                                "FCP Xmt Err: noxri %06x nondlp %06x "
-                               "qdepth %06x wqerr %06x Abrt %06x\n",
+                               "qdepth %06x wqerr %06x err %06x Abrt %06x\n",
                                atomic_read(&lport->xmt_fcp_noxri),
                                atomic_read(&lport->xmt_fcp_bad_ndlp),
                                atomic_read(&lport->xmt_fcp_qdepth),
                                atomic_read(&lport->xmt_fcp_wqerr),
+                               atomic_read(&lport->xmt_fcp_err),
                                atomic_read(&lport->xmt_fcp_abort));
 
                len += snprintf(buf + len, size - len,
index 2d80c72..9fba34d 100644 (file)
@@ -1451,8 +1451,9 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport,
        vport = lport->vport;
 
        if (unlikely(!hw_queue_handle)) {
-               lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_ABTS,
-                                "6117 Fail Abort, NULL hw_queue_handle\n");
+               lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_IOERR,
+                                "6117 Fail IO, NULL hw_queue_handle\n");
+               atomic_inc(&lport->xmt_fcp_err);
                ret = -EBUSY;
                goto out_fail;
        }
@@ -1465,12 +1466,18 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport,
        }
 
        if (vport->load_flag & FC_UNLOADING) {
+               lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_IOERR,
+                                "6124 Fail IO, Driver unload\n");
+               atomic_inc(&lport->xmt_fcp_err);
                ret = -ENODEV;
                goto out_fail;
        }
 
        freqpriv = pnvme_fcreq->private;
        if (unlikely(!freqpriv)) {
+               lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_IOERR,
+                                "6158 Fail IO, NULL request data\n");
+               atomic_inc(&lport->xmt_fcp_err);
                ret = -EINVAL;
                goto out_fail;
        }
@@ -1488,29 +1495,22 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport,
         */
        ndlp = rport->ndlp;
        if (!ndlp || !NLP_CHK_NODE_ACT(ndlp)) {
-               lpfc_printf_vlog(vport, KERN_ERR, LOG_NODE | LOG_NVME_IOERR,
-                                "6053 rport %p, ndlp %p, DID x%06x "
-                                "ndlp not ready.\n",
+               lpfc_printf_vlog(vport, KERN_INFO, LOG_NODE | LOG_NVME_IOERR,
+                                "6053 Fail IO, ndlp not ready: rport %p "
+                                 "ndlp %p, DID x%06x\n",
                                 rport, ndlp, pnvme_rport->port_id);
-
-               ndlp = lpfc_findnode_did(vport, pnvme_rport->port_id);
-               if (!ndlp) {
-                       lpfc_printf_vlog(vport, KERN_ERR, LOG_NVME_IOERR,
-                                        "6066 Missing node for DID %x\n",
-                                        pnvme_rport->port_id);
-                       atomic_inc(&lport->xmt_fcp_bad_ndlp);
-                       ret = -EBUSY;
-                       goto out_fail;
-               }
+               atomic_inc(&lport->xmt_fcp_err);
+               ret = -EBUSY;
+               goto out_fail;
        }
 
        /* The remote node has to be a mapped target or it's an error. */
        if ((ndlp->nlp_type & NLP_NVME_TARGET) &&
            (ndlp->nlp_state != NLP_STE_MAPPED_NODE)) {
-               lpfc_printf_vlog(vport, KERN_ERR, LOG_NODE | LOG_NVME_IOERR,
-                                "6036 rport %p, DID x%06x not ready for "
+               lpfc_printf_vlog(vport, KERN_INFO, LOG_NODE | LOG_NVME_IOERR,
+                                "6036 Fail IO, DID x%06x not ready for "
                                 "IO. State x%x, Type x%x Flg x%x\n",
-                                rport, pnvme_rport->port_id,
+                                pnvme_rport->port_id,
                                 ndlp->nlp_state, ndlp->nlp_type,
                                 ndlp->upcall_flags);
                atomic_inc(&lport->xmt_fcp_bad_ndlp);
@@ -1535,6 +1535,10 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport,
         */
        if ((atomic_read(&ndlp->cmd_pending) >= ndlp->cmd_qdepth) &&
            !expedite) {
+               lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_IOERR,
+                                "6174 Fail IO, ndlp qdepth exceeded: "
+                                "idx %d DID %x\n",
+                                lpfc_queue_info->index, ndlp->nlp_DID);
                atomic_inc(&lport->xmt_fcp_qdepth);
                ret = -EBUSY;
                goto out_fail;
@@ -1544,8 +1548,9 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport,
        if (lpfc_ncmd == NULL) {
                atomic_inc(&lport->xmt_fcp_noxri);
                lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_IOERR,
-                                "6065 driver's buffer pool is empty, "
-                                "IO failed\n");
+                                "6065 Fail IO, driver buffer pool is empty: "
+                                "idx %d DID %x\n",
+                                lpfc_queue_info->index, ndlp->nlp_DID);
                ret = -EBUSY;
                goto out_fail;
        }
@@ -1585,6 +1590,11 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport,
        lpfc_nvme_prep_io_cmd(vport, lpfc_ncmd, ndlp, cstat);
        ret = lpfc_nvme_prep_io_dma(vport, lpfc_ncmd);
        if (ret) {
+               lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_IOERR,
+                                "6175 Fail IO, Prep DMA: "
+                                "idx %d DID %x\n",
+                                lpfc_queue_info->index, ndlp->nlp_DID);
+               atomic_inc(&lport->xmt_fcp_err);
                ret = -ENOMEM;
                goto out_free_nvme_buf;
        }
@@ -1600,7 +1610,7 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport,
                atomic_inc(&lport->xmt_fcp_wqerr);
                atomic_dec(&ndlp->cmd_pending);
                lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_IOERR,
-                                "6113 FCP could not issue WQE err %x "
+                                "6113 Fail IO, Could not issue WQE err %x "
                                 "sid: x%x did: x%x oxid: x%x\n",
                                 ret, vport->fc_myDID, ndlp->nlp_DID,
                                 lpfc_ncmd->cur_iocbq.sli4_xritag);
@@ -2477,6 +2487,7 @@ lpfc_nvme_create_localport(struct lpfc_vport *vport)
                atomic_set(&lport->xmt_fcp_noxri, 0);
                atomic_set(&lport->xmt_fcp_bad_ndlp, 0);
                atomic_set(&lport->xmt_fcp_qdepth, 0);
+               atomic_set(&lport->xmt_fcp_err, 0);
                atomic_set(&lport->xmt_fcp_wqerr, 0);
                atomic_set(&lport->xmt_fcp_abort, 0);
                atomic_set(&lport->xmt_ls_abort, 0);
index 5323697..1291893 100644 (file)
@@ -59,6 +59,7 @@ struct lpfc_nvme_lport {
        atomic_t xmt_fcp_bad_ndlp;
        atomic_t xmt_fcp_qdepth;
        atomic_t xmt_fcp_wqerr;
+       atomic_t xmt_fcp_err;
        atomic_t xmt_fcp_abort;
        atomic_t xmt_ls_abort;
        atomic_t xmt_ls_err;