Browse Source

[SCSI] lpfc: don't free mempool if mailbox is busy

Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
James Smart 18 years ago
parent
commit
8aee918a1c
1 changed files with 4 additions and 2 deletions
  1. 4 2
      drivers/scsi/lpfc/lpfc_init.c

+ 4 - 2
drivers/scsi/lpfc/lpfc_init.c

@@ -389,7 +389,8 @@ lpfc_config_port_post(struct lpfc_hba * phba)
 
 
 	lpfc_init_link(phba, pmb, phba->cfg_topology, phba->cfg_link_speed);
 	lpfc_init_link(phba, pmb, phba->cfg_topology, phba->cfg_link_speed);
 	pmb->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
 	pmb->mbox_cmpl = lpfc_sli_def_mbox_cmpl;
-	if (lpfc_sli_issue_mbox(phba, pmb, MBX_NOWAIT) != MBX_SUCCESS) {
+	rc = lpfc_sli_issue_mbox(phba, pmb, MBX_NOWAIT);
+	if (rc != MBX_SUCCESS) {
 		lpfc_printf_log(phba,
 		lpfc_printf_log(phba,
 				KERN_ERR,
 				KERN_ERR,
 				LOG_INIT,
 				LOG_INIT,
@@ -406,7 +407,8 @@ lpfc_config_port_post(struct lpfc_hba * phba)
 		readl(phba->HAregaddr); /* flush */
 		readl(phba->HAregaddr); /* flush */
 
 
 		phba->hba_state = LPFC_HBA_ERROR;
 		phba->hba_state = LPFC_HBA_ERROR;
-		mempool_free(pmb, phba->mbox_mem_pool);
+		if (rc != MBX_BUSY)
+			mempool_free(pmb, phba->mbox_mem_pool);
 		return -EIO;
 		return -EIO;
 	}
 	}
 	/* MBOX buffer will be freed in mbox compl */
 	/* MBOX buffer will be freed in mbox compl */