scsi: lpfc: Change IO submit return to EBUSY if remote port is recovering
authorJames Smart <jsmart2021@gmail.com>
Sat, 5 May 2018 03:37:50 +0000 (20:37 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 8 May 2018 05:03:15 +0000 (01:03 -0400)
I/O submission paths in the lpfc nvme path are rejecting the io with an
error code that reflects back to the callee as a hard io failure. Many
of these conditions are transient and would likely resolve if retried.

Correct by returning -EBUSY, which the FC transport triggers off of to
return busy status codes to the blk-mq layer.

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_nvme.c

index 9e03456..2d80c72 100644 (file)
@@ -1452,8 +1452,8 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport,
 
        if (unlikely(!hw_queue_handle)) {
                lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_ABTS,
-                                "6129 Fail Abort, NULL hw_queue_handle\n");
-               ret = -EINVAL;
+                                "6117 Fail Abort, NULL hw_queue_handle\n");
+               ret = -EBUSY;
                goto out_fail;
        }
 
@@ -1499,7 +1499,7 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport,
                                         "6066 Missing node for DID %x\n",
                                         pnvme_rport->port_id);
                        atomic_inc(&lport->xmt_fcp_bad_ndlp);
-                       ret = -ENODEV;
+                       ret = -EBUSY;
                        goto out_fail;
                }
        }
@@ -1509,11 +1509,12 @@ lpfc_nvme_fcp_io_submit(struct nvme_fc_local_port *pnvme_lport,
            (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 "
-                                "IO. State x%x, Type x%x\n",
+                                "IO. State x%x, Type x%x Flg x%x\n",
                                 rport, pnvme_rport->port_id,
-                                ndlp->nlp_state, ndlp->nlp_type);
+                                ndlp->nlp_state, ndlp->nlp_type,
+                                ndlp->upcall_flags);
                atomic_inc(&lport->xmt_fcp_bad_ndlp);
-               ret = -ENODEV;
+               ret = -EBUSY;
                goto out_fail;
 
        }