diff options
author | James Smart <jsmart2021@gmail.com> | 2021-10-20 23:14:14 +0200 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2021-10-21 05:33:45 +0200 |
commit | 15af02d8a5852acd07617ad4deb2500ca2e0304c (patch) | |
tree | 167697b0f04106fb9bad3393d173425e12e78211 /drivers/scsi/lpfc | |
parent | scsi: lpfc: Fix use-after-free in lpfc_unreg_rpi() routine (diff) | |
download | linux-15af02d8a5852acd07617ad4deb2500ca2e0304c.tar.xz linux-15af02d8a5852acd07617ad4deb2500ca2e0304c.zip |
scsi: lpfc: Allow PLOGI retry if previous PLOGI was aborted
A remote nport can stop responding to PLOGI beyond the ELS I/O timeout
under some fault conditions. When this happens, the non-response triggers
a dev_loss_tmo event from the transport which causes the driver to abort
the PLOGI and stop any retries. This was due to a policy in the ELS
completion handler whenever an ELS was terminated due to driver request.
Revise the ELS completion path to detect PLOGIs that were aborted and
allow retries.
Link: https://lore.kernel.org/r/20211020211417.88754-6-jsmart2021@gmail.com
Co-developed-by: Justin Tee <justin.tee@broadcom.com>
Signed-off-by: Justin Tee <justin.tee@broadcom.com>
Signed-off-by: James Smart <jsmart2021@gmail.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi/lpfc')
-rw-r--r-- | drivers/scsi/lpfc/lpfc_els.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c index de38f4b886ca..746fe9772453 100644 --- a/drivers/scsi/lpfc/lpfc_els.c +++ b/drivers/scsi/lpfc/lpfc_els.c @@ -4577,6 +4577,19 @@ lpfc_els_retry(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, retry = 1; delay = 100; break; + case IOERR_SLI_ABORTED: + /* Retry ELS PLOGI command? + * Possibly the rport just wasn't ready. + */ + if (cmd == ELS_CMD_PLOGI) { + /* No retry if state change */ + if (ndlp && + ndlp->nlp_state != NLP_STE_PLOGI_ISSUE) + goto out_retry; + retry = 1; + maxretry = 2; + } + break; } break; |