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.kenn...@broadcom.com>
Signed-off-by: James Smart <james.sm...@broadcom.com>
---
 drivers/scsi/lpfc/lpfc_attr.c    |  3 ++-
 drivers/scsi/lpfc/lpfc_debugfs.c |  3 ++-
 drivers/scsi/lpfc/lpfc_nvme.c    | 53 ++++++++++++++++++++++++----------------
 drivers/scsi/lpfc/lpfc_nvme.h    |  1 +
 4 files changed, 37 insertions(+), 23 deletions(-)

diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c
index fd3b25317887..e79724564b2e 100644
--- a/drivers/scsi/lpfc/lpfc_attr.c
+++ b/drivers/scsi/lpfc/lpfc_attr.c
@@ -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,
diff --git a/drivers/scsi/lpfc/lpfc_debugfs.c b/drivers/scsi/lpfc/lpfc_debugfs.c
index afe7883c988a..ccc342247782 100644
--- a/drivers/scsi/lpfc/lpfc_debugfs.c
+++ b/drivers/scsi/lpfc/lpfc_debugfs.c
@@ -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,
diff --git a/drivers/scsi/lpfc/lpfc_nvme.c b/drivers/scsi/lpfc/lpfc_nvme.c
index 2d80c7207869..9fba34d5d5e1 100644
--- a/drivers/scsi/lpfc/lpfc_nvme.c
+++ b/drivers/scsi/lpfc/lpfc_nvme.c
@@ -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);
diff --git a/drivers/scsi/lpfc/lpfc_nvme.h b/drivers/scsi/lpfc/lpfc_nvme.h
index 53236974f2dd..129189324c31 100644
--- a/drivers/scsi/lpfc/lpfc_nvme.h
+++ b/drivers/scsi/lpfc/lpfc_nvme.h
@@ -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;
-- 
2.13.1

Reply via email to