[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:
parent
8e9d58e723
commit
a96e0c7798
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue