Commit 7ec2e27a authored by Bart Van Assche's avatar Bart Van Assche Committed by Jason Gunthorpe
Browse files

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: default avatarMax Gurtovoy <maxg@mellanox.com>
Fixes: f273ad4f ("RDMA/srp: Remove support for FMR memory registration")
Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
parent 6dc26498
Loading
Loading
Loading
Loading
+6 −7
Original line number Diff line number Diff line
@@ -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 ib_device *ibdev = srp_dev->dev;
	struct srp_request *req;
	void *mr_list;
	dma_addr_t dma_addr;
	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) {
		req = &ch->req_ring[i];
		mr_list = kmalloc_array(target->mr_per_cmd, sizeof(void *),
					GFP_KERNEL);
		if (!mr_list)
		if (srp_dev->use_fast_reg) {
			req->fr_list = kmalloc_array(target->mr_per_cmd,
						sizeof(void *), GFP_KERNEL);
			if (!req->fr_list)
				goto out;
		if (srp_dev->use_fast_reg)
			req->fr_list = mr_list;
		}
		req->indirect_desc = kmalloc(target->indirect_size, GFP_KERNEL);
		if (!req->indirect_desc)
			goto out;