svcrdma: Add a "parsed chunk list" data structure
authorChuck Lever <chuck.lever@oracle.com>
Mon, 22 Jun 2020 14:15:41 +0000 (10:15 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Mon, 30 Nov 2020 18:00:22 +0000 (13:00 -0500)
commit78147ca8b4a9b6cf0e597ddd6bf17959e08376c2
tree9222da84a51b34258996dafeb3a2774a96122a39
parentded380f10072c924a17be6ac996019ff6472c9d2
svcrdma: Add a "parsed chunk list" data structure

This simple data structure binds the location of each data payload
inside of an RPC message to the chunk that will be used to push it
to or pull it from the client.

There are several benefits to this small additional overhead:

 * It enables support for more than one chunk in incoming Read and
   Write lists.

 * It translates the version-specific on-the-wire format into a
   generic in-memory structure, enabling support for multiple
   versions of the RPC/RDMA transport protocol.

 * It enables the server to re-organize a chunk list if it needs to
   adjust where Read chunk data lands in server memory without
   altering the contents of the XDR-encoded Receive buffer.

Construction of these lists is done while sanity checking each
incoming RPC/RDMA header. Subsequent patches will make use of the
generated data structures.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
include/linux/sunrpc/svc_rdma.h
include/linux/sunrpc/svc_rdma_pcl.h [new file with mode: 0644]
include/trace/events/rpcrdma.h
net/sunrpc/xprtrdma/Makefile
net/sunrpc/xprtrdma/svc_rdma_pcl.c [new file with mode: 0644]
net/sunrpc/xprtrdma/svc_rdma_recvfrom.c