• Chuck Lever's avatar
    xprtrdma: Check inline size before providing a Write chunk · d4550bbe
    Chuck Lever authored
    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: default avatarChuck Lever <chuck.lever@oracle.com>
    Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
    d4550bbe
rpc_rdma.c 37.3 KB