Commit 6ad42535 authored by Jamie Wellnitz's avatar Jamie Wellnitz Committed by James Bottomley
Browse files

[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: default avatarJamie Wellnitz <Jamie.Wellnitz@emulex.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent 7bb3b137
Loading
Loading
Loading
Loading
+16 −12
Original line number Diff line number Diff line
@@ -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:
		if (!lpfc_issue_els_plogi(phba, ndlp, retry)) {
			ndlp->nlp_state = NLP_STE_PLOGI_ISSUE;
			lpfc_nlp_list(phba, ndlp, NLP_PLOGI_LIST);
		lpfc_issue_els_plogi(phba, ndlp, retry);
		}
		break;
	case ELS_CMD_ADISC:
		if (!lpfc_issue_els_adisc(phba, ndlp, retry)) {
			ndlp->nlp_state = NLP_STE_ADISC_ISSUE;
			lpfc_nlp_list(phba, ndlp, NLP_ADISC_LIST);
		lpfc_issue_els_adisc(phba, ndlp, retry);
		}
		break;
	case ELS_CMD_PRLI:
		if (!lpfc_issue_els_prli(phba, ndlp, retry)) {
			ndlp->nlp_state = NLP_STE_PRLI_ISSUE;
			lpfc_nlp_list(phba, ndlp, NLP_PRLI_LIST);
		lpfc_issue_els_prli(phba, ndlp, retry);
		}
		break;
	case ELS_CMD_LOGO:
		if (!lpfc_issue_els_logo(phba, ndlp, retry)) {
			ndlp->nlp_state = NLP_STE_NPR_NODE;
			lpfc_nlp_list(phba, ndlp, NLP_NPR_LIST);
		lpfc_issue_els_logo(phba, ndlp, retry);
		}
		break;
	}
	return;
+8 −0
Original line number Diff line number Diff line
@@ -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);
}