Commit 44c2757b authored by James Smart's avatar James Smart Committed by Martin K. Petersen

scsi: lpfc: Fix up log messages and stats counters in IO submit code path

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: default avatarDick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: default avatarJames Smart <james.smart@broadcom.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent d38f33b3
...@@ -405,11 +405,12 @@ lpfc_nvme_info_show(struct device *dev, struct device_attribute *attr, ...@@ -405,11 +405,12 @@ lpfc_nvme_info_show(struct device *dev, struct device_attribute *attr,
len += snprintf(buf+len, PAGE_SIZE-len, len += snprintf(buf+len, PAGE_SIZE-len,
" abort %08x noxri %08x nondlp %08x qdepth %08x " " 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_abort),
atomic_read(&lport->xmt_fcp_noxri), atomic_read(&lport->xmt_fcp_noxri),
atomic_read(&lport->xmt_fcp_bad_ndlp), atomic_read(&lport->xmt_fcp_bad_ndlp),
atomic_read(&lport->xmt_fcp_qdepth), atomic_read(&lport->xmt_fcp_qdepth),
atomic_read(&lport->xmt_fcp_err),
atomic_read(&lport->xmt_fcp_wqerr)); atomic_read(&lport->xmt_fcp_wqerr));
len += snprintf(buf + len, PAGE_SIZE - len, len += snprintf(buf + len, PAGE_SIZE - len,
......
...@@ -959,11 +959,12 @@ lpfc_debugfs_nvmestat_data(struct lpfc_vport *vport, char *buf, int size) ...@@ -959,11 +959,12 @@ lpfc_debugfs_nvmestat_data(struct lpfc_vport *vport, char *buf, int size)
len += snprintf(buf + len, size - len, len += snprintf(buf + len, size - len,
"FCP Xmt Err: noxri %06x nondlp %06x " "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_noxri),
atomic_read(&lport->xmt_fcp_bad_ndlp), atomic_read(&lport->xmt_fcp_bad_ndlp),
atomic_read(&lport->xmt_fcp_qdepth), atomic_read(&lport->xmt_fcp_qdepth),
atomic_read(&lport->xmt_fcp_wqerr), atomic_read(&lport->xmt_fcp_wqerr),
atomic_read(&lport->xmt_fcp_err),
atomic_read(&lport->xmt_fcp_abort)); atomic_read(&lport->xmt_fcp_abort));
len += snprintf(buf + len, size - len, len += snprintf(buf + len, size - len,
......
...@@ -1451,8 +1451,9 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport, ...@@ -1451,8 +1451,9 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport,
vport = lport->vport; vport = lport->vport;
if (unlikely(!hw_queue_handle)) { if (unlikely(!hw_queue_handle)) {
lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_ABTS, lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_IOERR,
"6117 Fail Abort, NULL hw_queue_handle\n"); "6117 Fail IO, NULL hw_queue_handle\n");
atomic_inc(&lport->xmt_fcp_err);
ret = -EBUSY; ret = -EBUSY;
goto out_fail; goto out_fail;
} }
...@@ -1465,12 +1466,18 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport, ...@@ -1465,12 +1466,18 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport,
} }
if (vport->load_flag & FC_UNLOADING) { 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; ret = -ENODEV;
goto out_fail; goto out_fail;
} }
freqpriv = pnvme_fcreq->private; freqpriv = pnvme_fcreq->private;
if (unlikely(!freqpriv)) { 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; ret = -EINVAL;
goto out_fail; goto out_fail;
} }
...@@ -1488,29 +1495,22 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport, ...@@ -1488,29 +1495,22 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport,
*/ */
ndlp = rport->ndlp; ndlp = rport->ndlp;
if (!ndlp || !NLP_CHK_NODE_ACT(ndlp)) { if (!ndlp || !NLP_CHK_NODE_ACT(ndlp)) {
lpfc_printf_vlog(vport, KERN_ERR, LOG_NODE | LOG_NVME_IOERR, lpfc_printf_vlog(vport, KERN_INFO, LOG_NODE | LOG_NVME_IOERR,
"6053 rport %p, ndlp %p, DID x%06x " "6053 Fail IO, ndlp not ready: rport %p "
"ndlp not ready.\n", "ndlp %p, DID x%06x\n",
rport, ndlp, pnvme_rport->port_id); rport, ndlp, pnvme_rport->port_id);
atomic_inc(&lport->xmt_fcp_err);
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; ret = -EBUSY;
goto out_fail; goto out_fail;
} }
}
/* The remote node has to be a mapped target or it's an error. */ /* The remote node has to be a mapped target or it's an error. */
if ((ndlp->nlp_type & NLP_NVME_TARGET) && if ((ndlp->nlp_type & NLP_NVME_TARGET) &&
(ndlp->nlp_state != NLP_STE_MAPPED_NODE)) { (ndlp->nlp_state != NLP_STE_MAPPED_NODE)) {
lpfc_printf_vlog(vport, KERN_ERR, LOG_NODE | LOG_NVME_IOERR, lpfc_printf_vlog(vport, KERN_INFO, LOG_NODE | LOG_NVME_IOERR,
"6036 rport %p, DID x%06x not ready for " "6036 Fail IO, DID x%06x not ready for "
"IO. State x%x, Type x%x Flg x%x\n", "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->nlp_state, ndlp->nlp_type,
ndlp->upcall_flags); ndlp->upcall_flags);
atomic_inc(&lport->xmt_fcp_bad_ndlp); atomic_inc(&lport->xmt_fcp_bad_ndlp);
...@@ -1535,6 +1535,10 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport, ...@@ -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) && if ((atomic_read(&ndlp->cmd_pending) >= ndlp->cmd_qdepth) &&
!expedite) { !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); atomic_inc(&lport->xmt_fcp_qdepth);
ret = -EBUSY; ret = -EBUSY;
goto out_fail; goto out_fail;
...@@ -1544,8 +1548,9 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport, ...@@ -1544,8 +1548,9 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport,
if (lpfc_ncmd == NULL) { if (lpfc_ncmd == NULL) {
atomic_inc(&lport->xmt_fcp_noxri); atomic_inc(&lport->xmt_fcp_noxri);
lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_IOERR, lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_IOERR,
"6065 driver's buffer pool is empty, " "6065 Fail IO, driver buffer pool is empty: "
"IO failed\n"); "idx %d DID %x\n",
lpfc_queue_info->index, ndlp->nlp_DID);
ret = -EBUSY; ret = -EBUSY;
goto out_fail; goto out_fail;
} }
...@@ -1585,6 +1590,11 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport, ...@@ -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); lpfc_nvme_prep_io_cmd(vport, lpfc_ncmd, ndlp, cstat);
ret = lpfc_nvme_prep_io_dma(vport, lpfc_ncmd); ret = lpfc_nvme_prep_io_dma(vport, lpfc_ncmd);
if (ret) { 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; ret = -ENOMEM;
goto out_free_nvme_buf; goto out_free_nvme_buf;
} }
...@@ -1600,7 +1610,7 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport, ...@@ -1600,7 +1610,7 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport,
atomic_inc(&lport->xmt_fcp_wqerr); atomic_inc(&lport->xmt_fcp_wqerr);
atomic_dec(&ndlp->cmd_pending); atomic_dec(&ndlp->cmd_pending);
lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_IOERR, 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", "sid: x%x did: x%x oxid: x%x\n",
ret, vport->fc_myDID, ndlp->nlp_DID, ret, vport->fc_myDID, ndlp->nlp_DID,
lpfc_ncmd->cur_iocbq.sli4_xritag); lpfc_ncmd->cur_iocbq.sli4_xritag);
...@@ -2477,6 +2487,7 @@ lpfc_nvme_create_localport(struct lpfc_vport *vport) ...@@ -2477,6 +2487,7 @@ lpfc_nvme_create_localport(struct lpfc_vport *vport)
atomic_set(&lport->xmt_fcp_noxri, 0); atomic_set(&lport->xmt_fcp_noxri, 0);
atomic_set(&lport->xmt_fcp_bad_ndlp, 0); atomic_set(&lport->xmt_fcp_bad_ndlp, 0);
atomic_set(&lport->xmt_fcp_qdepth, 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_wqerr, 0);
atomic_set(&lport->xmt_fcp_abort, 0); atomic_set(&lport->xmt_fcp_abort, 0);
atomic_set(&lport->xmt_ls_abort, 0); atomic_set(&lport->xmt_ls_abort, 0);
......
...@@ -59,6 +59,7 @@ struct lpfc_nvme_lport { ...@@ -59,6 +59,7 @@ struct lpfc_nvme_lport {
atomic_t xmt_fcp_bad_ndlp; atomic_t xmt_fcp_bad_ndlp;
atomic_t xmt_fcp_qdepth; atomic_t xmt_fcp_qdepth;
atomic_t xmt_fcp_wqerr; atomic_t xmt_fcp_wqerr;
atomic_t xmt_fcp_err;
atomic_t xmt_fcp_abort; atomic_t xmt_fcp_abort;
atomic_t xmt_ls_abort; atomic_t xmt_ls_abort;
atomic_t xmt_ls_err; atomic_t xmt_ls_err;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment