linux/net/sunrpc/xprtrdma
Chuck Lever d4550bbee6 xprtrdma: Check inline size before providing a Write chunk
In very rare cases, an NFS READ operation might predict that the
non-payload part of the RPC Call is large. For instance, an
NFSv4 COMPOUND with a large GETATTR result, in combination with a
large Kerberos credential, could push the non-payload part to be
several kilobytes.

If the non-payload part is larger than the connection's inline
threshold, the client is required to provision a Reply chunk. The
current Linux client does not check for this case. There are two
obvious ways to handle it:

a. Provision a Write chunk for the payload and a Reply chunk for
   the non-payload part

b. Provision a Reply chunk for the whole RPC Reply

Some testing at a recent NFS bake-a-thon showed that servers can
mostly handle a. but there are some corner cases that do not work
yet. b. already works (it has to, to handle krb5i/p), but could be
somewhat less efficient. However, I expect this scenario to be very
rare -- no-one has reported a problem yet.

So I'm going to implement b. Sometime later I will provide some
patches to help make b. a little more efficient by more carefully
choosing the Reply chunk's segment sizes to ensure the payload is
optimally aligned.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
2019-02-13 10:19:06 -05:00
..
backchannel.c NFS client updates for Linux 4.21 2019-01-02 16:35:23 -08:00
frwr_ops.c xprtrdma: Fix sparse warnings 2019-02-13 10:05:24 -05:00
Makefile xprtrdma: Remove support for FMR memory registration 2019-01-02 12:05:17 -05:00
module.c NFS client updates for Linux 4.18 2018-06-12 10:09:03 -07:00
rpc_rdma.c xprtrdma: Check inline size before providing a Write chunk 2019-02-13 10:19:06 -05:00
svc_rdma_backchannel.c xprtrdma: Don't wake pending tasks until disconnect is done 2019-01-02 12:05:16 -05:00
svc_rdma_recvfrom.c svcrdma: Optimize the logic that selects the R_key to invalidate 2018-11-28 18:36:03 -05:00
svc_rdma_rw.c A mistake on my part caused me to tag my branch 6 commits too early, 2018-08-23 16:00:10 -07:00
svc_rdma_sendto.c svcrdma: Remove max_sge check at connect time 2019-02-06 15:32:34 -05:00
svc_rdma_transport.c svcrdma: Remove max_sge check at connect time 2019-02-06 15:32:34 -05:00
svc_rdma.c sunrpc: remove svc_rdma_bc_class 2018-12-27 21:01:41 -05:00
transport.c NFS client updates for Linux 4.21 2019-01-02 16:35:23 -08:00
verbs.c xprtrdma: Double free in rpcrdma_sendctxs_create() 2019-01-08 12:06:17 -05:00
xprt_rdma.h xprtrdma: Fix sparse warnings 2019-02-13 10:05:24 -05:00