• Chuck Lever's avatar
    xprtrdma: Prevent inline overflow · 302d3deb
    Chuck Lever authored
    When deciding whether to send a Call inline, rpcrdma_marshal_req
    doesn't take into account header bytes consumed by chunk lists.
    This results in Call messages on the wire that are sometimes larger
    than the inline threshold.
    
    Likewise, when a Write list or Reply chunk is in play, the server's
    reply has to emit an RDMA Send that includes a larger-than-minimal
    RPC-over-RDMA header.
    
    The actual size of a Call message cannot be estimated until after
    the chunk lists have been registered. Thus the size of each
    RPC-over-RDMA header can be estimated only after chunks are
    registered; but the decision to register chunks is based on the size
    of that header. Chicken, meet egg.
    
    The best a client can do is estimate header size based on the
    largest header that might occur, and then ensure that inline content
    is always smaller than that.
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Tested-by: default avatarSteve Wise <swise@opengridcomputing.com>
    Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
    302d3deb
xprt_rdma.h 17.9 KB