linux/net/sunrpc/xprtrdma
Chuck Lever 3a88092ee3 svcrdma: Preserve Receive buffer until svc_rdma_sendto
Rather than releasing the incoming svc_rdma_recv_ctxt at the end of
svc_rdma_recvfrom, hold onto it until svc_rdma_sendto.

This permits the contents of the Receive buffer to be preserved
through svc_process and then referenced directly in sendto as it
constructs Write and Reply chunks to return to the client.

The real changes will come in subsequent patches.

Note: I cannot use ->xpo_release_rqst for this purpose because that
is called _before_ ->xpo_sendto. svc_rdma_sendto uses information in
the received Call transport header to construct the Reply transport
header, which is preserved in the RPC's Receive buffer.

The historical comment in svc_send() isn't helpful: it is already
obvious that ->xpo_release_rqst is being called before ->xpo_sendto,
but there is no explanation for this ordering going back to the
beginning of the git era.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
2018-05-11 15:48:57 -04:00
..
backchannel.c svcrdma: Trace key RDMA API events 2018-05-11 15:48:57 -04:00
fmr_ops.c svcrdma: Trace key RDMA API events 2018-05-11 15:48:57 -04:00
frwr_ops.c svcrdma: Trace key RDMA API events 2018-05-11 15:48:57 -04:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
module.c xprtrdma: Prepare RPC/RDMA includes for server-side trace points 2018-05-11 15:48:57 -04:00
rpc_rdma.c svcrdma: Trace key RDMA API events 2018-05-11 15:48:57 -04:00
svc_rdma_backchannel.c svcrdma: Trace key RDMA API events 2018-05-11 15:48:57 -04:00
svc_rdma_recvfrom.c svcrdma: Preserve Receive buffer until svc_rdma_sendto 2018-05-11 15:48:57 -04:00
svc_rdma_rw.c svcrdma: Simplify svc_rdma_recv_ctxt_put 2018-05-11 15:48:57 -04:00
svc_rdma_sendto.c svcrdma: Preserve Receive buffer until svc_rdma_sendto 2018-05-11 15:48:57 -04:00
svc_rdma_transport.c svcrdma: Remove sc_rq_depth 2018-05-11 15:48:57 -04:00
svc_rdma.c xprtrdma: Prepare RPC/RDMA includes for server-side trace points 2018-05-11 15:48:57 -04:00
transport.c svcrdma: Trace key RDMA API events 2018-05-11 15:48:57 -04:00
verbs.c xprtrdma: Prepare RPC/RDMA includes for server-side trace points 2018-05-11 15:48:57 -04:00
xprt_rdma.h xprtrdma: Prepare RPC/RDMA includes for server-side trace points 2018-05-11 15:48:57 -04:00