mirror of https://gitee.com/openkylin/linux.git
[SCSI] lpfc 8.1.2: Fixed a race condition in the PLOGI retry logic.
Fixed a race condition in the PLOGI retry logic. Signed-off-by: Jamie Wellnitz <Jamie.Wellnitz@emulex.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
parent
7bb3b137ab
commit
6ad425356b
|
@ -1467,24 +1467,28 @@ lpfc_els_retry_delay_handler(struct lpfc_nodelist *ndlp)
|
|||
lpfc_issue_els_flogi(phba, ndlp, retry);
|
||||
break;
|
||||
case ELS_CMD_PLOGI:
|
||||
ndlp->nlp_state = NLP_STE_PLOGI_ISSUE;
|
||||
lpfc_nlp_list(phba, ndlp, NLP_PLOGI_LIST);
|
||||
lpfc_issue_els_plogi(phba, ndlp, retry);
|
||||
if (!lpfc_issue_els_plogi(phba, ndlp, retry)) {
|
||||
ndlp->nlp_state = NLP_STE_PLOGI_ISSUE;
|
||||
lpfc_nlp_list(phba, ndlp, NLP_PLOGI_LIST);
|
||||
}
|
||||
break;
|
||||
case ELS_CMD_ADISC:
|
||||
ndlp->nlp_state = NLP_STE_ADISC_ISSUE;
|
||||
lpfc_nlp_list(phba, ndlp, NLP_ADISC_LIST);
|
||||
lpfc_issue_els_adisc(phba, ndlp, retry);
|
||||
if (!lpfc_issue_els_adisc(phba, ndlp, retry)) {
|
||||
ndlp->nlp_state = NLP_STE_ADISC_ISSUE;
|
||||
lpfc_nlp_list(phba, ndlp, NLP_ADISC_LIST);
|
||||
}
|
||||
break;
|
||||
case ELS_CMD_PRLI:
|
||||
ndlp->nlp_state = NLP_STE_PRLI_ISSUE;
|
||||
lpfc_nlp_list(phba, ndlp, NLP_PRLI_LIST);
|
||||
lpfc_issue_els_prli(phba, ndlp, retry);
|
||||
if (!lpfc_issue_els_prli(phba, ndlp, retry)) {
|
||||
ndlp->nlp_state = NLP_STE_PRLI_ISSUE;
|
||||
lpfc_nlp_list(phba, ndlp, NLP_PRLI_LIST);
|
||||
}
|
||||
break;
|
||||
case ELS_CMD_LOGO:
|
||||
ndlp->nlp_state = NLP_STE_NPR_NODE;
|
||||
lpfc_nlp_list(phba, ndlp, NLP_NPR_LIST);
|
||||
lpfc_issue_els_logo(phba, ndlp, retry);
|
||||
if (!lpfc_issue_els_logo(phba, ndlp, retry)) {
|
||||
ndlp->nlp_state = NLP_STE_NPR_NODE;
|
||||
lpfc_nlp_list(phba, ndlp, NLP_NPR_LIST);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return;
|
||||
|
|
|
@ -1627,6 +1627,14 @@ lpfc_device_recov_npr_node(struct lpfc_hba * phba,
|
|||
{
|
||||
spin_lock_irq(phba->host->host_lock);
|
||||
ndlp->nlp_flag &= ~NLP_NPR_2B_DISC;
|
||||
if (ndlp->nlp_flag & NLP_DELAY_TMO) {
|
||||
ndlp->nlp_flag &= ~NLP_DELAY_TMO;
|
||||
if (!list_empty(&ndlp->els_retry_evt.evt_listp))
|
||||
list_del_init(&ndlp->els_retry_evt.evt_listp);
|
||||
spin_unlock_irq(phba->host->host_lock);
|
||||
del_timer_sync(&ndlp->nlp_delayfunc);
|
||||
return (ndlp->nlp_state);
|
||||
}
|
||||
spin_unlock_irq(phba->host->host_lock);
|
||||
return (ndlp->nlp_state);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue