• Jeff Layton's avatar
    fs/nfsd: fix update of inode attrs in CB_GETATTR · 7e8ae848
    Jeff Layton authored
    Currently, we copy the mtime and ctime to the in-core inode and then
    mark the inode dirty. This is fine for certain types of filesystems, but
    not all. Some require a real setattr to properly change these values
    (e.g. ceph or reexported NFS).
    
    Fix this code to call notify_change() instead, which is the proper way
    to effect a setattr. There is one problem though:
    
    In this case, the client is holding a write delegation and has sent us
    attributes to update our cache. We don't want to break the delegation
    for this since that would defeat the purpose. Add a new ATTR_DELEG flag
    that makes notify_change bypass the try_break_deleg call.
    
    Fixes: c5967721 ("NFSD: handle GETATTR conflict with write delegation")
    Reviewed-by: default avatarChristian Brauner <brauner@kernel.org>
    Signed-off-by: default avatarJeff Layton <jlayton@kernel.org>
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    7e8ae848
nfs4xdr.c 155 KB