• Chuck Lever's avatar
    xprtrdma: Fix large NFS SYMLINK calls · 2fcc213a
    Chuck Lever authored
    Repair how rpcrdma_marshal_req() chooses which RDMA message type
    to use for large non-WRITE operations so that it picks RDMA_NOMSG
    in the correct situations, and sets up the marshaling logic to
    SEND only the RPC/RDMA header.
    
    Large NFSv2 SYMLINK requests now use RDMA_NOMSG calls. The Linux NFS
    server XDR decoder for NFSv2 SYMLINK does not handle having the
    pathname argument arrive in a separate buffer. The decoder could be
    fixed, but this is simpler and RDMA_NOMSG can be used in a variety
    of other situations.
    
    Ensure that the Linux client continues to use "RDMA_MSG + read
    list" when sending large NFSv3 SYMLINK requests, which is more
    efficient than using RDMA_NOMSG.
    
    Large NFSv4 CREATE(NF4LNK) requests are changed to use "RDMA_MSG +
    read list" just like NFSv3 (see Section 5 of RFC 5667). Before,
    these did not work at all.
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Tested-by: default avatarDevesh Sharma <devesh.sharma@avagotech.com>
    Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
    2fcc213a
nfs4xdr.c 194 KB