|
@@ -4495,7 +4495,7 @@ lpfc_unreg_rpi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
|
|
{
|
|
{
|
|
struct lpfc_hba *phba = vport->phba;
|
|
struct lpfc_hba *phba = vport->phba;
|
|
LPFC_MBOXQ_t *mbox;
|
|
LPFC_MBOXQ_t *mbox;
|
|
- int rc;
|
|
|
|
|
|
+ int rc, acc_plogi = 1;
|
|
uint16_t rpi;
|
|
uint16_t rpi;
|
|
|
|
|
|
if (ndlp->nlp_flag & NLP_RPI_REGISTERED ||
|
|
if (ndlp->nlp_flag & NLP_RPI_REGISTERED ||
|
|
@@ -4528,14 +4528,20 @@ lpfc_unreg_rpi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
|
|
mbox->context1 = lpfc_nlp_get(ndlp);
|
|
mbox->context1 = lpfc_nlp_get(ndlp);
|
|
mbox->mbox_cmpl =
|
|
mbox->mbox_cmpl =
|
|
lpfc_sli4_unreg_rpi_cmpl_clr;
|
|
lpfc_sli4_unreg_rpi_cmpl_clr;
|
|
|
|
+ /*
|
|
|
|
+ * accept PLOGIs after unreg_rpi_cmpl
|
|
|
|
+ */
|
|
|
|
+ acc_plogi = 0;
|
|
} else
|
|
} else
|
|
mbox->mbox_cmpl =
|
|
mbox->mbox_cmpl =
|
|
lpfc_sli_def_mbox_cmpl;
|
|
lpfc_sli_def_mbox_cmpl;
|
|
}
|
|
}
|
|
|
|
|
|
rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT);
|
|
rc = lpfc_sli_issue_mbox(phba, mbox, MBX_NOWAIT);
|
|
- if (rc == MBX_NOT_FINISHED)
|
|
|
|
|
|
+ if (rc == MBX_NOT_FINISHED) {
|
|
mempool_free(mbox, phba->mbox_mem_pool);
|
|
mempool_free(mbox, phba->mbox_mem_pool);
|
|
|
|
+ acc_plogi = 1;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
lpfc_no_rpi(phba, ndlp);
|
|
lpfc_no_rpi(phba, ndlp);
|
|
|
|
|
|
@@ -4543,8 +4549,11 @@ lpfc_unreg_rpi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
|
|
ndlp->nlp_rpi = 0;
|
|
ndlp->nlp_rpi = 0;
|
|
ndlp->nlp_flag &= ~NLP_RPI_REGISTERED;
|
|
ndlp->nlp_flag &= ~NLP_RPI_REGISTERED;
|
|
ndlp->nlp_flag &= ~NLP_NPR_ADISC;
|
|
ndlp->nlp_flag &= ~NLP_NPR_ADISC;
|
|
|
|
+ if (acc_plogi)
|
|
|
|
+ ndlp->nlp_flag &= ~NLP_LOGO_ACC;
|
|
return 1;
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
+ ndlp->nlp_flag &= ~NLP_LOGO_ACC;
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|