Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

lpfc: Fix mbox reuse in PLOGI completion

Fix mbox reuse in PLOGI completion. Moved allocations so that buffer
properly init'd.

Signed-off-by: Dick Kennedy <dick.kennedy@avagotech.com>
Signed-off-by: James Smart <james.smart@avagotech.com>
Reviewed-by: Hannes Reinicke <hare@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>

authored by

James Smart and committed by
Martin K. Petersen
01c73bbc a085e87c

+21 -10
+21 -10
drivers/scsi/lpfc/lpfc_nportdisc.c
··· 1045 1045 if (irsp->ulpStatus) 1046 1046 goto out; 1047 1047 1048 - mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); 1049 - if (!mbox) { 1050 - lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS, 1051 - "0133 PLOGI: no memory for reg_login " 1052 - "Data: x%x x%x x%x x%x\n", 1053 - ndlp->nlp_DID, ndlp->nlp_state, 1054 - ndlp->nlp_flag, ndlp->nlp_rpi); 1055 - goto out; 1056 - } 1057 - 1058 1048 pcmd = (struct lpfc_dmabuf *) cmdiocb->context2; 1059 1049 1060 1050 prsp = list_get_first(&pcmd->list, struct lpfc_dmabuf, list); ··· 1108 1118 if (phba->sli_rev == LPFC_SLI_REV4) { 1109 1119 lpfc_issue_reg_vfi(vport); 1110 1120 } else { 1121 + mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); 1122 + if (!mbox) { 1123 + lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS, 1124 + "0133 PLOGI: no memory " 1125 + "for config_link " 1126 + "Data: x%x x%x x%x x%x\n", 1127 + ndlp->nlp_DID, ndlp->nlp_state, 1128 + ndlp->nlp_flag, ndlp->nlp_rpi); 1129 + goto out; 1130 + } 1131 + 1111 1132 lpfc_config_link(phba, mbox); 1112 1133 1113 1134 mbox->mbox_cmpl = lpfc_sli_def_mbox_cmpl; ··· 1132 1131 } 1133 1132 1134 1133 lpfc_unreg_rpi(vport, ndlp); 1134 + 1135 + mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); 1136 + if (!mbox) { 1137 + lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS, 1138 + "0018 PLOGI: no memory for reg_login " 1139 + "Data: x%x x%x x%x x%x\n", 1140 + ndlp->nlp_DID, ndlp->nlp_state, 1141 + ndlp->nlp_flag, ndlp->nlp_rpi); 1142 + goto out; 1143 + } 1135 1144 1136 1145 if (lpfc_reg_rpi(phba, vport->vpi, irsp->un.elsreq64.remoteID, 1137 1146 (uint8_t *) sp, mbox, ndlp->nlp_rpi) == 0) {