• Chuck Lever's avatar
    NFSD: Hoist status code encoding into XDR encoder functions · cc028a10
    Chuck Lever authored
    The original intent was presumably to reduce code duplication. The
    trade-off was:
    
    - No support for an NFSD proc function returning a non-success
      RPC accept_stat value.
    - No support for void NFS replies to non-NULL procedures.
    - Everyone pays for the deduplication with a few extra conditional
      branches in a hot path.
    
    In addition, nfsd_dispatch() leaves *statp uninitialized in the
    success path, unlike svc_generic_dispatch().
    
    Address all of these problems by moving the logic for encoding
    the NFS status code into the NFS XDR encoders themselves. Then
    update the NFS .pc_func methods to return an RPC accept_stat
    value.
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
    cc028a10
nfs3xdr.c 27.4 KB