RDMA/srp: Fix a recently introduced memory leak
Only allocate a memory registration list if it will be used and if it will be freed. Link: https://lore.kernel.org/r/20210524041211.9480-5-bvanassche@acm.org Reviewed-by: Max Gurtovoy <maxg@mellanox.com> Fixes: f273ad4f8d90 ("RDMA/srp: Remove support for FMR memory registration") Signed-off-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
parent
6dc26498e1
commit
7ec2e27a3a
@ -998,7 +998,6 @@ static int srp_alloc_req_data(struct srp_rdma_ch *ch)
|
|||||||
struct srp_device *srp_dev = target->srp_host->srp_dev;
|
struct srp_device *srp_dev = target->srp_host->srp_dev;
|
||||||
struct ib_device *ibdev = srp_dev->dev;
|
struct ib_device *ibdev = srp_dev->dev;
|
||||||
struct srp_request *req;
|
struct srp_request *req;
|
||||||
void *mr_list;
|
|
||||||
dma_addr_t dma_addr;
|
dma_addr_t dma_addr;
|
||||||
int i, ret = -ENOMEM;
|
int i, ret = -ENOMEM;
|
||||||
|
|
||||||
@ -1009,12 +1008,12 @@ static int srp_alloc_req_data(struct srp_rdma_ch *ch)
|
|||||||
|
|
||||||
for (i = 0; i < target->req_ring_size; ++i) {
|
for (i = 0; i < target->req_ring_size; ++i) {
|
||||||
req = &ch->req_ring[i];
|
req = &ch->req_ring[i];
|
||||||
mr_list = kmalloc_array(target->mr_per_cmd, sizeof(void *),
|
if (srp_dev->use_fast_reg) {
|
||||||
GFP_KERNEL);
|
req->fr_list = kmalloc_array(target->mr_per_cmd,
|
||||||
if (!mr_list)
|
sizeof(void *), GFP_KERNEL);
|
||||||
goto out;
|
if (!req->fr_list)
|
||||||
if (srp_dev->use_fast_reg)
|
goto out;
|
||||||
req->fr_list = mr_list;
|
}
|
||||||
req->indirect_desc = kmalloc(target->indirect_size, GFP_KERNEL);
|
req->indirect_desc = kmalloc(target->indirect_size, GFP_KERNEL);
|
||||||
if (!req->indirect_desc)
|
if (!req->indirect_desc)
|
||||||
goto out;
|
goto out;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user