]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
xprtrdma: xprt_rdma_free() must not release backchannel reqs
authorChuck Lever <chuck.lever@oracle.com>
Wed, 16 Dec 2015 22:22:14 +0000 (17:22 -0500)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Fri, 18 Dec 2015 20:34:33 +0000 (15:34 -0500)
Preserve any rpcrdma_req that is attached to rpc_rqst's allocated
for the backchannel. Otherwise, after all the pre-allocated
backchannel req's are consumed, incoming backward calls start
writing on freed memory.

Somehow this hunk got lost.

Fixes: f531a5dbc451 ('xprtrdma: Pre-allocate backward rpc_rqst')
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Tested-by: Devesh Sharma <devesh.sharma@avagotech.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
net/sunrpc/xprtrdma/transport.c

index 8c545f7d75257ef72135f8dec24a91ad86fbbc9f..740bddcf3488fe9c2e6db48f0b7967909a4caca0 100644 (file)
@@ -576,6 +576,9 @@ xprt_rdma_free(void *buffer)
 
        rb = container_of(buffer, struct rpcrdma_regbuf, rg_base[0]);
        req = rb->rg_owner;
+       if (req->rl_backchannel)
+               return;
+
        r_xprt = container_of(req->rl_buffer, struct rpcrdma_xprt, rx_buf);
 
        dprintk("RPC:       %s: called on 0x%p\n", __func__, req->rl_reply);