aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/lpfc/lpfc_hbadisc.c
diff options
context:
space:
mode:
authorJames Smart <James.Smart@Emulex.Com>2006-12-02 13:34:28 -0500
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>2006-12-03 10:29:36 -0500
commit146911500f2572fba31895aebacdc4f283208c37 (patch)
treed0f648c159f19409b7b72980ba9595600eb4761e /drivers/scsi/lpfc/lpfc_hbadisc.c
parenta4bc3379fbc368597024104727fdf14ced483c14 (diff)
[SCSI] lpfc 8.1.11 : Fix Memory leaks
Fix Memory leaks associated with mbox cmds READ_LA, READ_SPARAM, REG_LOGIN Signed-off-by: James Smart <James.Smart@emulex.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_hbadisc.c')
-rw-r--r--drivers/scsi/lpfc/lpfc_hbadisc.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
index 7c28184ad56d..1118b6d49fcc 100644
--- a/drivers/scsi/lpfc/lpfc_hbadisc.c
+++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
@@ -715,6 +715,9 @@ lpfc_mbx_process_link_up(struct lpfc_hba *phba, READ_LA_VAR *la)
715{ 715{
716 int i; 716 int i;
717 LPFC_MBOXQ_t *sparam_mbox, *cfglink_mbox; 717 LPFC_MBOXQ_t *sparam_mbox, *cfglink_mbox;
718 struct lpfc_dmabuf *mp;
719 int rc;
720
718 sparam_mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); 721 sparam_mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
719 cfglink_mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); 722 cfglink_mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
720 723
@@ -793,16 +796,27 @@ lpfc_mbx_process_link_up(struct lpfc_hba *phba, READ_LA_VAR *la)
793 if (sparam_mbox) { 796 if (sparam_mbox) {
794 lpfc_read_sparam(phba, sparam_mbox); 797 lpfc_read_sparam(phba, sparam_mbox);
795 sparam_mbox->mbox_cmpl = lpfc_mbx_cmpl_read_sparam; 798 sparam_mbox->mbox_cmpl = lpfc_mbx_cmpl_read_sparam;
796 lpfc_sli_issue_mbox(phba, sparam_mbox, 799 rc = lpfc_sli_issue_mbox(phba, sparam_mbox,
797 (MBX_NOWAIT | MBX_STOP_IOCB)); 800 (MBX_NOWAIT | MBX_STOP_IOCB));
801 if (rc == MBX_NOT_FINISHED) {
802 mp = (struct lpfc_dmabuf *) sparam_mbox->context1;
803 lpfc_mbuf_free(phba, mp->virt, mp->phys);
804 kfree(mp);
805 mempool_free(sparam_mbox, phba->mbox_mem_pool);
806 if (cfglink_mbox)
807 mempool_free(cfglink_mbox, phba->mbox_mem_pool);
808 return;
809 }
798 } 810 }
799 811
800 if (cfglink_mbox) { 812 if (cfglink_mbox) {
801 phba->hba_state = LPFC_LOCAL_CFG_LINK; 813 phba->hba_state = LPFC_LOCAL_CFG_LINK;
802 lpfc_config_link(phba, cfglink_mbox); 814 lpfc_config_link(phba, cfglink_mbox);
803 cfglink_mbox->mbox_cmpl = lpfc_mbx_cmpl_local_config_link; 815 cfglink_mbox->mbox_cmpl = lpfc_mbx_cmpl_local_config_link;
804 lpfc_sli_issue_mbox(phba, cfglink_mbox, 816 rc = lpfc_sli_issue_mbox(phba, cfglink_mbox,
805 (MBX_NOWAIT | MBX_STOP_IOCB)); 817 (MBX_NOWAIT | MBX_STOP_IOCB));
818 if (rc == MBX_NOT_FINISHED)
819 mempool_free(cfglink_mbox, phba->mbox_mem_pool);
806 } 820 }
807} 821}
808 822