Commit 10d4e957 authored by James Smart's avatar James Smart Committed by James Bottomley

[SCSI] lpfc 8.1.5 : Additional fixes to LOGO, PLOGI, and RSCN processing

Additional fixes to LOGO, PLOGI, and RSCN processing
Signed-off-by: default avatarJames Smart <James.Smart@emulex.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent defbcf11
...@@ -777,7 +777,6 @@ lpfc_cmpl_els_plogi(struct lpfc_hba * phba, struct lpfc_iocbq * cmdiocb, ...@@ -777,7 +777,6 @@ lpfc_cmpl_els_plogi(struct lpfc_hba * phba, struct lpfc_iocbq * cmdiocb,
if (disc && phba->num_disc_nodes) { if (disc && phba->num_disc_nodes) {
/* Check to see if there are more PLOGIs to be sent */ /* Check to see if there are more PLOGIs to be sent */
lpfc_more_plogi(phba); lpfc_more_plogi(phba);
}
if (phba->num_disc_nodes == 0) { if (phba->num_disc_nodes == 0) {
spin_lock_irq(phba->host->host_lock); spin_lock_irq(phba->host->host_lock);
...@@ -786,8 +785,9 @@ lpfc_cmpl_els_plogi(struct lpfc_hba * phba, struct lpfc_iocbq * cmdiocb, ...@@ -786,8 +785,9 @@ lpfc_cmpl_els_plogi(struct lpfc_hba * phba, struct lpfc_iocbq * cmdiocb,
lpfc_can_disctmo(phba); lpfc_can_disctmo(phba);
if (phba->fc_flag & FC_RSCN_MODE) { if (phba->fc_flag & FC_RSCN_MODE) {
/* Check to see if more RSCNs came in while we were /*
* processing this one. * Check to see if more RSCNs came in while
* we were processing this one.
*/ */
if ((phba->fc_rscn_id_cnt == 0) && if ((phba->fc_rscn_id_cnt == 0) &&
(!(phba->fc_flag & FC_RSCN_DISCOVERY))) { (!(phba->fc_flag & FC_RSCN_DISCOVERY))) {
...@@ -799,6 +799,7 @@ lpfc_cmpl_els_plogi(struct lpfc_hba * phba, struct lpfc_iocbq * cmdiocb, ...@@ -799,6 +799,7 @@ lpfc_cmpl_els_plogi(struct lpfc_hba * phba, struct lpfc_iocbq * cmdiocb,
} }
} }
} }
}
out: out:
lpfc_els_free_iocb(phba, cmdiocb); lpfc_els_free_iocb(phba, cmdiocb);
...@@ -1259,7 +1260,7 @@ lpfc_issue_els_logo(struct lpfc_hba * phba, struct lpfc_nodelist * ndlp, ...@@ -1259,7 +1260,7 @@ lpfc_issue_els_logo(struct lpfc_hba * phba, struct lpfc_nodelist * ndlp,
psli = &phba->sli; psli = &phba->sli;
pring = &psli->ring[LPFC_ELS_RING]; pring = &psli->ring[LPFC_ELS_RING];
cmdsize = 2 * (sizeof (uint32_t) + sizeof (struct lpfc_name)); cmdsize = (2 * sizeof (uint32_t)) + sizeof (struct lpfc_name);
elsiocb = lpfc_prep_els_iocb(phba, 1, cmdsize, retry, ndlp, elsiocb = lpfc_prep_els_iocb(phba, 1, cmdsize, retry, ndlp,
ndlp->nlp_DID, ELS_CMD_LOGO); ndlp->nlp_DID, ELS_CMD_LOGO);
if (!elsiocb) if (!elsiocb)
...@@ -1447,18 +1448,18 @@ lpfc_cancel_retry_delay_tmo(struct lpfc_hba *phba, struct lpfc_nodelist * nlp) ...@@ -1447,18 +1448,18 @@ lpfc_cancel_retry_delay_tmo(struct lpfc_hba *phba, struct lpfc_nodelist * nlp)
* PLOGIs to be sent * PLOGIs to be sent
*/ */
lpfc_more_plogi(phba); lpfc_more_plogi(phba);
}
if (phba->num_disc_nodes == 0) { if (phba->num_disc_nodes == 0) {
phba->fc_flag &= ~FC_NDISC_ACTIVE; phba->fc_flag &= ~FC_NDISC_ACTIVE;
lpfc_can_disctmo(phba); lpfc_can_disctmo(phba);
if (phba->fc_flag & FC_RSCN_MODE) { if (phba->fc_flag & FC_RSCN_MODE) {
/* Check to see if more RSCNs /*
* Check to see if more RSCNs
* came in while we were * came in while we were
* processing this one. * processing this one.
*/ */
if((phba->fc_rscn_id_cnt==0) && if((phba->fc_rscn_id_cnt==0) &&
(!(phba->fc_flag & FC_RSCN_DISCOVERY))) { !(phba->fc_flag & FC_RSCN_DISCOVERY)) {
phba->fc_flag &= ~FC_RSCN_MODE; phba->fc_flag &= ~FC_RSCN_MODE;
} }
else { else {
...@@ -1467,6 +1468,7 @@ lpfc_cancel_retry_delay_tmo(struct lpfc_hba *phba, struct lpfc_nodelist * nlp) ...@@ -1467,6 +1468,7 @@ lpfc_cancel_retry_delay_tmo(struct lpfc_hba *phba, struct lpfc_nodelist * nlp)
} }
} }
} }
}
return; return;
} }
......
...@@ -1404,6 +1404,8 @@ lpfc_check_sli_ndlp(struct lpfc_hba * phba, ...@@ -1404,6 +1404,8 @@ lpfc_check_sli_ndlp(struct lpfc_hba * phba,
if (icmd->ulpContext == (volatile ushort)ndlp->nlp_rpi) if (icmd->ulpContext == (volatile ushort)ndlp->nlp_rpi)
return 1; return 1;
case CMD_ELS_REQUEST64_CR: case CMD_ELS_REQUEST64_CR:
if (icmd->un.elsreq64.remoteID == ndlp->nlp_DID)
return 1;
case CMD_XMIT_ELS_RSP64_CX: case CMD_XMIT_ELS_RSP64_CX:
if (iocb->context1 == (uint8_t *) ndlp) if (iocb->context1 == (uint8_t *) ndlp)
return 1; return 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment