diff mbox series

lpfc: Fix nonrecovery of remote ports following an unsolicited LOGO

Message ID 20211123165646.62740-1-jsmart2021@gmail.com (mailing list archive)
State Accepted
Headers show
Series lpfc: Fix nonrecovery of remote ports following an unsolicited LOGO | expand

Commit Message

James Smart Nov. 23, 2021, 4:56 p.m. UTC
A commit introduced formal regstration of all Fabric nodes to the SCSI
transport as well as REG/UNREG RPI mailbox requests. The commit
introduced the NLP_RELEASE_RPI flag for rports  set in the
lpfc_cmpl_els_logo_acc() routine to help clean up the RPIs. This new
code caused the driver to release the RPI value used for the remote port
and marked the RPI invalid.  When the driver later attempted to re-login,
it would use the invalid RPI and the adapter rejected the PLOGI request.
As no login occurred, the devloss timer on the rport expired and
connectivity was lost.

This patch corrects the code by removing the snippet that requests the
rpi to be unregistered. This change only occurs on a node that is already
marked to be rediscovered. This puts the code back to its original
behavior, preserving the already-assigned rpi value (registered or not)
which can be used on the re-login attempts.

Fixes: fe83e3b9b422 ("scsi: lpfc: Fix node handling for Fabric Controller and Domain Controller")
Cc: <stable@vger.kernel.org> # v5.14+
Co-developed-by: Paul Ely <paul.ely@broadcom.com>
Signed-off-by: Paul Ely <paul.ely@broadcom.com>
Signed-off-by: James Smart <jsmart2021@gmail.com>
---
 drivers/scsi/lpfc/lpfc_els.c | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

Comments

Martin K. Petersen Nov. 30, 2021, 4:37 a.m. UTC | #1
On Tue, 23 Nov 2021 08:56:46 -0800, James Smart wrote:

> A commit introduced formal regstration of all Fabric nodes to the SCSI
> transport as well as REG/UNREG RPI mailbox requests. The commit
> introduced the NLP_RELEASE_RPI flag for rports  set in the
> lpfc_cmpl_els_logo_acc() routine to help clean up the RPIs. This new
> code caused the driver to release the RPI value used for the remote port
> and marked the RPI invalid.  When the driver later attempted to re-login,
> it would use the invalid RPI and the adapter rejected the PLOGI request.
> As no login occurred, the devloss timer on the rport expired and
> connectivity was lost.
> 
> [...]

Applied to 5.16/scsi-fixes, thanks!

[1/1] lpfc: Fix nonrecovery of remote ports following an unsolicited LOGO
      https://git.kernel.org/mkp/scsi/c/0956ba63bd94
diff mbox series

Patch

diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
index b940e0268f96..e83453bea2ae 100644
--- a/drivers/scsi/lpfc/lpfc_els.c
+++ b/drivers/scsi/lpfc/lpfc_els.c
@@ -5095,14 +5095,9 @@  lpfc_cmpl_els_logo_acc(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
 		/* NPort Recovery mode or node is just allocated */
 		if (!lpfc_nlp_not_used(ndlp)) {
 			/* A LOGO is completing and the node is in NPR state.
-			 * If this a fabric node that cleared its transport
-			 * registration, release the rpi.
+			 * Just unregister the RPI because the node is still
+			 * required.
 			 */
-			spin_lock_irq(&ndlp->lock);
-			ndlp->nlp_flag &= ~NLP_NPR_2B_DISC;
-			if (phba->sli_rev == LPFC_SLI_REV4)
-				ndlp->nlp_flag |= NLP_RELEASE_RPI;
-			spin_unlock_irq(&ndlp->lock);
 			lpfc_unreg_rpi(vport, ndlp);
 		} else {
 			/* Indicate the node has already released, should