Skip to content
  • Rick Macklem's avatar
    Add support for NFSv4.2 to the NFS client and server. · c057a378
    Rick Macklem authored
    This patch adds support for NFSv4.2 (RFC-7862) and Extended Attributes
    (RFC-8276) to the NFS client and server.
    NFSv4.2 is comprised of several optional features that can be supported
    in addition to NFSv4.1. This patch adds the following optional features:
       - posix_fadvise(POSIX_FADV_WILLNEED/POSIX_FADV_DONTNEED)
       - posix_fallocate()
       - intra server file range copying via the copy_file_range(2) syscall
         --> Avoiding data tranfer over the wire to/from the NFS client.
       - lseek(SEEK_DATA/SEEK_HOLE)
       - Extended attribute syscalls for "user" namespace attributes as defined
         by RFC-8276.
    
    Although this patch is fairly large, it should not affect support for
    the other versions of NFS. However it does add two new sysctls that allow
    a sysadmin to limit which minor versions of NFSv4 a server supports, allowing
    a sysadmin to disable NFSv4.2.
    
    Unfortunately, when the NFS stats structure was last revised, it was assumed
    that there would be no additional operations added beyond what was
    specified in RFC-7862. However RFC-8276 did add additional operations,
    forcing the NFS stats structure to revised again. It now has extra unused
    entries in all arrays, so that future extensions to NFSv4.2 can be
    accomodated without revising this structure again.
    
    A future commit will update nfsstat(1) to report counts for the new NFSv4.2
    specific operations/procedures.
    
    This patch affects the internal interface between the nfscommon, nfscl and
    nfsd modules and, as such, they all must be upgraded simultaneously.
    I will do a version bump (although arguably not needed), due to this.
    
    This code has survived a "make universe" but has not been built with a
    recent GCC. If you encounter build problems, please email me.
    
    Relnotes:	yes
    c057a378