diff options
author | James Smart <james.smart@emulex.com> | 2011-02-16 12:39:44 -0500 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2011-02-18 13:47:20 -0500 |
commit | 924941444b481fc862b2de5e1dd7692ca85274d7 (patch) | |
tree | 4a19d10d1e8803f3662b93d615c35a474b3d8328 /drivers/scsi/lpfc/lpfc_nportdisc.c | |
parent | 1151e3ec15c32021a8a12a123459ab5e41692898 (diff) |
[SCSI] lpfc 8.3.21: FC Discovery changes
FC Discovery changes
- Treat received PLOGI while logged in as a relogin (unregister and reregister).
- Added a timer to delay Nport discovery when clean bit is cleared and Fabric
portname/nodename/FCID is changed.
- Invalidate Port's DID when receiving PLOGI from p2p port with CONFIG_PORT
mailbox command.
Signed-off-by: Alex Iannicelli <alex.iannicelli@emulex.com>
Signed-off-by: James Smart <james.smart@emulex.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_nportdisc.c')
-rw-r--r-- | drivers/scsi/lpfc/lpfc_nportdisc.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/scsi/lpfc/lpfc_nportdisc.c b/drivers/scsi/lpfc/lpfc_nportdisc.c index d85a7423a694..52b35159fc35 100644 --- a/drivers/scsi/lpfc/lpfc_nportdisc.c +++ b/drivers/scsi/lpfc/lpfc_nportdisc.c | |||
@@ -350,7 +350,11 @@ lpfc_rcv_plogi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, | |||
350 | ndlp->nlp_maxframe = | 350 | ndlp->nlp_maxframe = |
351 | ((sp->cmn.bbRcvSizeMsb & 0x0F) << 8) | sp->cmn.bbRcvSizeLsb; | 351 | ((sp->cmn.bbRcvSizeMsb & 0x0F) << 8) | sp->cmn.bbRcvSizeLsb; |
352 | 352 | ||
353 | /* no need to reg_login if we are already in one of these states */ | 353 | /* |
354 | * Need to unreg_login if we are already in one of these states and | ||
355 | * change to NPR state. This will block the port until after the ACC | ||
356 | * completes and the reg_login is issued and completed. | ||
357 | */ | ||
354 | switch (ndlp->nlp_state) { | 358 | switch (ndlp->nlp_state) { |
355 | case NLP_STE_NPR_NODE: | 359 | case NLP_STE_NPR_NODE: |
356 | if (!(ndlp->nlp_flag & NLP_NPR_ADISC)) | 360 | if (!(ndlp->nlp_flag & NLP_NPR_ADISC)) |
@@ -359,8 +363,9 @@ lpfc_rcv_plogi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, | |||
359 | case NLP_STE_PRLI_ISSUE: | 363 | case NLP_STE_PRLI_ISSUE: |
360 | case NLP_STE_UNMAPPED_NODE: | 364 | case NLP_STE_UNMAPPED_NODE: |
361 | case NLP_STE_MAPPED_NODE: | 365 | case NLP_STE_MAPPED_NODE: |
362 | lpfc_els_rsp_acc(vport, ELS_CMD_PLOGI, cmdiocb, ndlp, NULL); | 366 | lpfc_unreg_rpi(vport, ndlp); |
363 | return 1; | 367 | ndlp->nlp_prev_state = ndlp->nlp_state; |
368 | lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE); | ||
364 | } | 369 | } |
365 | 370 | ||
366 | if ((vport->fc_flag & FC_PT2PT) && | 371 | if ((vport->fc_flag & FC_PT2PT) && |