Commit cd240071 authored by James Smart's avatar James Smart Committed by Martin K. Petersen
Browse files

scsi: lpfc: Change IO submit return to EBUSY if remote port is recovering



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: 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 ab7ad49d
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -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;

	}