|
@@ -3662,7 +3662,7 @@ qla2x00_mem_alloc(struct qla_hw_data *ha, uint16_t req_len, uint16_t rsp_len,
|
|
|
sizeof(struct ct6_dsd), 0,
|
|
|
SLAB_HWCACHE_ALIGN, NULL);
|
|
|
if (!ctx_cachep)
|
|
|
- goto fail_free_gid_list;
|
|
|
+ goto fail_free_srb_mempool;
|
|
|
}
|
|
|
ha->ctx_mempool = mempool_create_slab_pool(SRB_MIN_REQ,
|
|
|
ctx_cachep);
|
|
@@ -3815,7 +3815,7 @@ qla2x00_mem_alloc(struct qla_hw_data *ha, uint16_t req_len, uint16_t rsp_len,
|
|
|
ha->loop_id_map = kzalloc(BITS_TO_LONGS(LOOPID_MAP_SIZE) * sizeof(long),
|
|
|
GFP_KERNEL);
|
|
|
if (!ha->loop_id_map)
|
|
|
- goto fail_async_pd;
|
|
|
+ goto fail_loop_id_map;
|
|
|
else {
|
|
|
qla2x00_set_reserved_loop_ids(ha);
|
|
|
ql_dbg_pci(ql_dbg_init, ha->pdev, 0x0123,
|
|
@@ -3824,6 +3824,8 @@ qla2x00_mem_alloc(struct qla_hw_data *ha, uint16_t req_len, uint16_t rsp_len,
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
+fail_loop_id_map:
|
|
|
+ dma_pool_free(ha->s_dma_pool, ha->async_pd, ha->async_pd_dma);
|
|
|
fail_async_pd:
|
|
|
dma_pool_free(ha->s_dma_pool, ha->ex_init_cb, ha->ex_init_cb_dma);
|
|
|
fail_ex_init_cb:
|
|
@@ -3851,6 +3853,10 @@ fail_free_ms_iocb:
|
|
|
dma_pool_free(ha->s_dma_pool, ha->ms_iocb, ha->ms_iocb_dma);
|
|
|
ha->ms_iocb = NULL;
|
|
|
ha->ms_iocb_dma = 0;
|
|
|
+
|
|
|
+ if (ha->sns_cmd)
|
|
|
+ dma_free_coherent(&ha->pdev->dev, sizeof(struct sns_cmd_pkt),
|
|
|
+ ha->sns_cmd, ha->sns_cmd_dma);
|
|
|
fail_dma_pool:
|
|
|
if (IS_QLA82XX(ha) || ql2xenabledif) {
|
|
|
dma_pool_destroy(ha->fcp_cmnd_dma_pool);
|
|
@@ -3868,10 +3874,12 @@ fail_free_nvram:
|
|
|
kfree(ha->nvram);
|
|
|
ha->nvram = NULL;
|
|
|
fail_free_ctx_mempool:
|
|
|
- mempool_destroy(ha->ctx_mempool);
|
|
|
+ if (ha->ctx_mempool)
|
|
|
+ mempool_destroy(ha->ctx_mempool);
|
|
|
ha->ctx_mempool = NULL;
|
|
|
fail_free_srb_mempool:
|
|
|
- mempool_destroy(ha->srb_mempool);
|
|
|
+ if (ha->srb_mempool)
|
|
|
+ mempool_destroy(ha->srb_mempool);
|
|
|
ha->srb_mempool = NULL;
|
|
|
fail_free_gid_list:
|
|
|
dma_free_coherent(&ha->pdev->dev, qla2x00_gid_list_size(ha),
|