• Dai Ngo's avatar
    NFSD: handle GETATTR conflict with write delegation · c5967721
    Dai Ngo authored
    If the GETATTR request on a file that has write delegation in effect
    and the request attributes include the change info and size attribute
    then the request is handled as below:
    
    Server sends CB_GETATTR to client to get the latest change info and file
    size. If these values are the same as the server's cached values then
    the GETATTR proceeds as normal.
    
    If either the change info or file size is different from the server's
    cached values, or the file was already marked as modified, then:
    
        . update time_modify and time_metadata into file's metadata
          with current time
    
        . encode GETATTR as normal except the file size is encoded with
          the value returned from CB_GETATTR
    
        . mark the file as modified
    
    If the CB_GETATTR fails for any reasons, the delegation is recalled
    and NFS4ERR_DELAY is returned for the GETATTR.
    Signed-off-by: default avatarDai Ngo <dai.ngo@oracle.com>
    Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    c5967721
nfs4xdr.c 153 KB