From: Dick Kennedy <dick.kenn...@broadcom.com>

A race condition was found whereby the initiator would receive
the RSCN for a new NVME device before it had a chance to register
its FC4 support with the fabric. Thus, when queried by the initiator,
it would see that the target supported FC-NVME.

Corrected by making the assumption that the target always supports
FC-NVME thus a PRLI is sent. It's ok for the target to reject it.

Signed-off-by: Dick Kennedy <dick.kenn...@broadcom.com>
Signed-off-by: James Smart <james.sm...@broadcom.com>
Reviewed-by: Johannes Thumshirn <jthumsh...@suse.de>
---
 drivers/scsi/lpfc/lpfc_els.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
index ffbd3eddeabb..6de470e158ef 100644
--- a/drivers/scsi/lpfc/lpfc_els.c
+++ b/drivers/scsi/lpfc/lpfc_els.c
@@ -2177,6 +2177,16 @@ lpfc_issue_els_prli(struct lpfc_vport *vport, struct 
lpfc_nodelist *ndlp,
        uint16_t cmdsize;
        u32 local_nlp_type, elscmd;
 
+       /*
+        * If we are in RSCN mode, the FC4 types supported from a
+        * previous GFT_ID command may not be accurate. So, if we
+        * are a NVME Initiator, always look for the possibility of
+        * the remote NPort beng a NVME Target.
+        */
+       if (phba->sli_rev == LPFC_SLI_REV4 &&
+           vport->fc_flag & FC_RSCN_MODE &&
+           vport->nvmei_support)
+               ndlp->nlp_fc4_type |= NLP_FC4_NVME;
        local_nlp_type = ndlp->nlp_fc4_type;
 
  send_next_prli:
-- 
2.13.1

Reply via email to