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

Commit 6c537f2c authored by Chuck Lever's avatar Chuck Lever Committed by Anna Schumaker
Browse files

xprtrdma: buf_free not called for CB replies



Since commit 5a6d1db4 ("SUNRPC: Add a transport-specific private
field in rpc_rqst"), the rpc_rqst's for RPC-over-RDMA backchannel
operations leave rq_buffer set to NULL.

xprt_release does not invoke ->op->buf_free when rq_buffer is NULL.
The RPCRDMA_REQ_F_BACKCHANNEL check in xprt_rdma_free is therefore
redundant because xprt_rdma_free is not invoked for backchannel
requests.

Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
parent a2b6470b
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -43,7 +43,6 @@ static int rpcrdma_bc_setup_rqst(struct rpcrdma_xprt *r_xprt,
	req = rpcrdma_create_req(r_xprt);
	if (IS_ERR(req))
		return PTR_ERR(req);
	__set_bit(RPCRDMA_REQ_F_BACKCHANNEL, &req->rl_flags);

	rb = rpcrdma_alloc_regbuf(RPCRDMA_HDRBUF_SIZE,
				  DMA_TO_DEVICE, GFP_KERNEL);
+0 −3
Original line number Diff line number Diff line
@@ -686,9 +686,6 @@ xprt_rdma_free(struct rpc_task *task)
	struct rpcrdma_xprt *r_xprt = rpcx_to_rdmax(rqst->rq_xprt);
	struct rpcrdma_req *req = rpcr_to_rdmar(rqst);

	if (test_bit(RPCRDMA_REQ_F_BACKCHANNEL, &req->rl_flags))
		return;

	dprintk("RPC:       %s: called on 0x%p\n", __func__, req->rl_reply);

	if (test_bit(RPCRDMA_REQ_F_PENDING, &req->rl_flags))
+1 −2
Original line number Diff line number Diff line
@@ -354,8 +354,7 @@ struct rpcrdma_req {

/* rl_flags */
enum {
	RPCRDMA_REQ_F_BACKCHANNEL = 0,
	RPCRDMA_REQ_F_PENDING,
	RPCRDMA_REQ_F_PENDING = 0,
	RPCRDMA_REQ_F_TX_RESOURCES,
};