• Chuck Lever's avatar
    nfsd: Incoming xdr_bufs may have content in tail buffer · eae03e2a
    Chuck Lever authored
    Since the beginning, svcsock has built a received RPC Call message
    by populating the xdr_buf's head, then placing the remaining
    message bytes in the xdr_buf's page list. The xdr_buf's tail is
    never populated.
    
    This means that an NFSv4 COMPOUND containing an NFS WRITE operation
    plus trailing operations has a page list that contains the WRITE
    data payload followed by the trailing operations. NFSv4 XDR decoders
    will not look in the xdr_buf's tail, ever, because svcsock never put
    anything there.
    
    To support transports that can pass the write payload in the
    xdr_buf's pagelist and trailing content in the xdr_buf's tail,
    introduce logic in READ_BUF that switches to the xdr_buf's tail vec
    when the decoder runs out of content in rq_arg.pages.
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
    eae03e2a
nfs4xdr.c 114 KB