[SCSI] scsi: lpfc error path fix

Add kmalloc failure check and fix the loop on error path. Without the
patch pool element at index [0] will not be freed.

Signed-off-by: Mariusz Kozlowski <m.kozlowski@tuxland.pl>
Acked-by: James Smart <James.Smart@Emulex.Com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
Mariusz Kozlowski 2007-01-02 01:07:32 +01:00 committed by James Bottomley
parent 8e9d58e723
commit a96e0c7798
1 changed files with 5 additions and 1 deletions

View File

@ -56,6 +56,9 @@ lpfc_mem_alloc(struct lpfc_hba * phba)
pool->elements = kmalloc(sizeof(struct lpfc_dmabuf) * pool->elements = kmalloc(sizeof(struct lpfc_dmabuf) *
LPFC_MBUF_POOL_SIZE, GFP_KERNEL); LPFC_MBUF_POOL_SIZE, GFP_KERNEL);
if (!pool->elements)
goto fail_free_lpfc_mbuf_pool;
pool->max_count = 0; pool->max_count = 0;
pool->current_count = 0; pool->current_count = 0;
for ( i = 0; i < LPFC_MBUF_POOL_SIZE; i++) { for ( i = 0; i < LPFC_MBUF_POOL_SIZE; i++) {
@ -82,10 +85,11 @@ lpfc_mem_alloc(struct lpfc_hba * phba)
fail_free_mbox_pool: fail_free_mbox_pool:
mempool_destroy(phba->mbox_mem_pool); mempool_destroy(phba->mbox_mem_pool);
fail_free_mbuf_pool: fail_free_mbuf_pool:
while (--i) while (i--)
pci_pool_free(phba->lpfc_mbuf_pool, pool->elements[i].virt, pci_pool_free(phba->lpfc_mbuf_pool, pool->elements[i].virt,
pool->elements[i].phys); pool->elements[i].phys);
kfree(pool->elements); kfree(pool->elements);
fail_free_lpfc_mbuf_pool:
pci_pool_destroy(phba->lpfc_mbuf_pool); pci_pool_destroy(phba->lpfc_mbuf_pool);
fail_free_dma_buf_pool: fail_free_dma_buf_pool:
pci_pool_destroy(phba->lpfc_scsi_dma_buf_pool); pci_pool_destroy(phba->lpfc_scsi_dma_buf_pool);