svcrdma: Renovate sendto chunk list parsing
authorChuck Lever <chuck.lever@oracle.com>
Tue, 29 Nov 2016 16:04:42 +0000 (11:04 -0500)
committerJ. Bruce Fields <bfields@redhat.com>
Wed, 30 Nov 2016 22:31:12 +0000 (17:31 -0500)
commit5fdca6531434c1c1b2d584873afdda52e5ad448c
tree1f5339c7414b9fb4b51a46dc73d29a85f174b1c8
parent4d712ef1db05c3aa5c3b690a50c37ebad584c53f
svcrdma: Renovate sendto chunk list parsing

The current sendto code appears to support clients that provide only
one of a Read list, a Write list, or a Reply chunk. My reading of
that code is that it doesn't support the following cases:

 - Read list + Write list
 - Read list + Reply chunk
 - Write list + Reply chunk
 - Read list + Write list + Reply chunk

The protocol allows more than one Read or Write chunk in those
lists. Some clients do send a Read list and Reply chunk
simultaneously. NFSv4 WRITE uses a Read list for the data payload,
and a Reply chunk because the GETATTR result in the reply can
contain a large object like an ACL.

Generalize one of the sendto code paths needed to support all of
the above cases, and attempt to ensure that only one pass is done
through the RPC Call's transport header to gather chunk list
information for building the reply.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
include/linux/sunrpc/svc_rdma.h
net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
net/sunrpc/xprtrdma/svc_rdma_sendto.c