Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+35 −33
Original line number Diff line number Diff line
@@ -777,7 +777,6 @@ lpfc_cmpl_els_plogi(struct lpfc_hba * phba, struct lpfc_iocbq * cmdiocb,
	if (disc && phba->num_disc_nodes) {
		/* Check to see if there are more PLOGIs to be sent */
		lpfc_more_plogi(phba);
	}

		if (phba->num_disc_nodes == 0) {
			spin_lock_irq(phba->host->host_lock);
@@ -786,8 +785,9 @@ lpfc_cmpl_els_plogi(struct lpfc_hba * phba, struct lpfc_iocbq * cmdiocb,

			lpfc_can_disctmo(phba);
			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) &&
			    	(!(phba->fc_flag & FC_RSCN_DISCOVERY))) {
@@ -799,6 +799,7 @@ lpfc_cmpl_els_plogi(struct lpfc_hba * phba, struct lpfc_iocbq * cmdiocb,
				}
			}
		}
	}

out:
	lpfc_els_free_iocb(phba, cmdiocb);
@@ -1259,7 +1260,7 @@ lpfc_issue_els_logo(struct lpfc_hba * phba, struct lpfc_nodelist * ndlp,
	psli = &phba->sli;
	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,
						ndlp->nlp_DID, ELS_CMD_LOGO);
	if (!elsiocb)
@@ -1447,18 +1448,18 @@ lpfc_cancel_retry_delay_tmo(struct lpfc_hba *phba, struct lpfc_nodelist * nlp)
			 * PLOGIs to be sent
			 */
			lpfc_more_plogi(phba);
		}

			if (phba->num_disc_nodes == 0) {
				phba->fc_flag &= ~FC_NDISC_ACTIVE;
				lpfc_can_disctmo(phba);
				if (phba->fc_flag & FC_RSCN_MODE) {
				/* Check to see if more RSCNs
					/*
					 * Check to see if more RSCNs
					 * came in while we were
					 * processing this one.
					 */
					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;
					}
					else {
@@ -1467,6 +1468,7 @@ lpfc_cancel_retry_delay_tmo(struct lpfc_hba *phba, struct lpfc_nodelist * nlp)
				}
			}
		}
	}
	return;
}

+2 −0
Original line number Diff line number Diff line
@@ -1404,6 +1404,8 @@ lpfc_check_sli_ndlp(struct lpfc_hba * phba,
			if (icmd->ulpContext == (volatile ushort)ndlp->nlp_rpi)
				return 1;
		case CMD_ELS_REQUEST64_CR:
			if (icmd->un.elsreq64.remoteID == ndlp->nlp_DID)
				return 1;
		case CMD_XMIT_ELS_RSP64_CX:
			if (iocb->context1 == (uint8_t *) ndlp)
				return 1;