All of lore.kernel.org
 help / color / mirror / Atom feed
From: James Smart <jsmart2021@gmail.com>
To: linux-scsi@vger.kernel.org
Cc: James Smart <jsmart2021@gmail.com>,
	Dick Kennedy <dick.kennedy@broadcom.com>
Subject: [PATCH 04/14] lpfc: Fix NVME rport deregister and registration during ADISC
Date: Tue, 30 Jun 2020 14:49:51 -0700	[thread overview]
Message-ID: <20200630215001.70793-5-jsmart2021@gmail.com> (raw)
In-Reply-To: <20200630215001.70793-1-jsmart2021@gmail.com>

During driver unload/reload testing, the nvme initiator would
not re-establish connectivity to nvme controllers on reload.

The failing nvme array supports concurrent FCP and NVME operation
via different nport_id's. The array was repeatedly sending an ADISC
every 2 seconds after PLOGI completed and while nvme subsytems were
executing discovery. The target would continue this state for
roughly 45 seconds.

The driver's current behavior on ADISC receipt is to validate a
the ADISC vs the device and issue a RESUME_RPI to restore
transmission. The receipt of the ADISC effectively caused a driver to
take actions similar to a logout and login for the remote port, causing
the deregistration of the nvme rport and a subsequent re-registration.
This caused a constant reset and re-connect of the nvme controller while
this 45s window occurred. There was no need for the state changes as
ADISC does not change login state.

This patch corrects this behavior by validating if the remoteport is
already logged in (MAPPED) and when true, avoids the call to set the ndlp
state to MAPPED, which triggers the unreg/re-reg. Thus ADISC does not
change the login state of the node.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <jsmart2021@gmail.com>
---
 drivers/scsi/lpfc/lpfc_nportdisc.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/drivers/scsi/lpfc/lpfc_nportdisc.c b/drivers/scsi/lpfc/lpfc_nportdisc.c
index 2871c9b0cbfa..057af32f498d 100644
--- a/drivers/scsi/lpfc/lpfc_nportdisc.c
+++ b/drivers/scsi/lpfc/lpfc_nportdisc.c
@@ -797,11 +797,17 @@ lpfc_rcv_padisc(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
 				ndlp, NULL);
 		}
 out:
-		/* If we are authenticated, move to the proper state */
-		if (ndlp->nlp_type & (NLP_FCP_TARGET | NLP_NVME_TARGET))
-			lpfc_nlp_set_state(vport, ndlp, NLP_STE_MAPPED_NODE);
-		else
-			lpfc_nlp_set_state(vport, ndlp, NLP_STE_UNMAPPED_NODE);
+		/* If we are authenticated, move to the proper state.
+		 * It is possible an ADISC arrived and the remote nport
+		 * is already in MAPPED or UNMAPPED state.  Catch this
+		 * condition and don't set the nlp_state again because
+		 * it causes an unnecessary transport unregister/register.
+		 */
+		if (ndlp->nlp_type & (NLP_FCP_TARGET | NLP_NVME_TARGET)) {
+			if (ndlp->nlp_state != NLP_STE_MAPPED_NODE)
+				lpfc_nlp_set_state(vport, ndlp,
+						   NLP_STE_MAPPED_NODE);
+		}
 
 		return 1;
 	}
-- 
2.25.0


  parent reply	other threads:[~2020-06-30 21:50 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-30 21:49 [PATCH 00/14] lpfc: Update lpfc to revision 12.8.0.2 James Smart
2020-06-30 21:49 ` [PATCH 01/14] lpfc: Fix unused assignment in lpfc_sli4_bsg_link_diag_test James Smart
2020-06-30 21:49 ` [PATCH 02/14] lpfc: Fix missing MDS functionality James Smart
2020-06-30 21:49 ` [PATCH 03/14] lpfc: Fix first-burst driver implementation James Smart
2020-07-02  3:05   ` Martin K. Petersen
2020-07-02  5:30     ` James Smart
2020-06-30 21:49 ` James Smart [this message]
2020-06-30 21:49 ` [PATCH 05/14] lpfc: Fix oops due to overrun when reading SLI3 data James Smart
2020-06-30 21:49 ` [PATCH 06/14] lpfc: Fix stack trace seen while setting rrq active James Smart
2020-06-30 21:49 ` [PATCH 07/14] lpfc: Fix shost refcount mismatch when deleting vport James Smart
2020-06-30 21:49 ` [PATCH 08/14] lpfc: Fix kdump hang on PPC James Smart
2020-06-30 21:49 ` [PATCH 09/14] lpfc: Fix language in 0373 message to reflect non-error message James Smart
2020-06-30 21:49 ` [PATCH 10/14] lpfc: Allow applications to issue Common Set Features mailbox command James Smart
2020-06-30 21:49 ` [PATCH 11/14] lpfc: Add support to display if adapter dumps are available James Smart
2020-06-30 21:49 ` [PATCH 12/14] lpfc: Add blk_io_poll support for latency improvment James Smart
2020-06-30 21:50 ` [PATCH 13/14] lpfc: Add an internal trace log buffer James Smart
2020-06-30 21:50 ` [PATCH 14/14] lpfc: Update lpfc version to 12.8.0.2 James Smart
2020-07-03  4:03 ` [PATCH 00/14] lpfc: Update lpfc to revision 12.8.0.2 Martin K. Petersen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200630215001.70793-5-jsmart2021@gmail.com \
    --to=jsmart2021@gmail.com \
    --cc=dick.kennedy@broadcom.com \
    --cc=linux-scsi@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.