Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b530e252 authored by Simon Derr's avatar Simon Derr Committed by Eric Van Hensbergen
Browse files

9P/RDMA: Do not free req->rc in error handling in rdma_request()



rdma_request() should never be in charge of freeing rc.

When an error occurs:
* Either the rc buffer has been recv_post()'ed.
  then kfree()'ing it certainly is a bad idea.
* Or is has not, and in that case req->rc still points to it,
  hence it needs not be freed.

Signed-off-by: default avatarSimon Derr <simon.derr@bull.net>
Signed-off-by: default avatarEric Van Hensbergen <ericvh@gmail.com>
parent fd453d0e
Loading
Loading
Loading
Loading
+3 −6
Original line number Diff line number Diff line
@@ -447,7 +447,7 @@ static int rdma_request(struct p9_client *client, struct p9_req_t *req)
	err = post_recv(client, rpl_context);
	if (err) {
		p9_debug(P9_DEBUG_FCALL, "POST RECV failed\n");
		goto err_free1;
		goto err_free;
	}

	/* remove posted receive buffer from request structure */
@@ -457,7 +457,7 @@ static int rdma_request(struct p9_client *client, struct p9_req_t *req)
	c = kmalloc(sizeof *c, GFP_NOFS);
	if (!c) {
		err = -ENOMEM;
		goto err_free1;
		goto err_free;
	}
	c->req = req;

@@ -486,13 +486,10 @@ static int rdma_request(struct p9_client *client, struct p9_req_t *req)

 error:
	kfree(c);
	kfree(rpl_context->rc);
	kfree(rpl_context);
	p9_debug(P9_DEBUG_ERROR, "EIO\n");
	return -EIO;
 err_free1:
	kfree(rpl_context->rc);
 err_free2:
 err_free:
	kfree(rpl_context);
 err_close:
	spin_lock_irqsave(&rdma->req_lock, flags);