NFS: Fix attribute delegation behaviour on exclusive create

When the client does an exclusive create and the server decides to store
the verifier in the timestamps, a SETATTR is subsequently sent to fix up
those timestamps. When that is the case, suppress the exceptions for
attribute delegations in nfs4_bitmap_copy_adjust().

Fixes: 32215c1f89 ("NFSv4: Don't request atime/mtime/size if they are delegated to us")
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
This commit is contained in:
Trond Myklebust 2024-10-23 09:35:43 -04:00 committed by Anna Schumaker
parent dc270d7159
commit d054c5eb28

View File

@ -3452,6 +3452,10 @@ static int nfs4_do_setattr(struct inode *inode, const struct cred *cred,
adjust_flags |= NFS_INO_INVALID_MODE; adjust_flags |= NFS_INO_INVALID_MODE;
if (sattr->ia_valid & (ATTR_UID | ATTR_GID)) if (sattr->ia_valid & (ATTR_UID | ATTR_GID))
adjust_flags |= NFS_INO_INVALID_OTHER; adjust_flags |= NFS_INO_INVALID_OTHER;
if (sattr->ia_valid & ATTR_ATIME)
adjust_flags |= NFS_INO_INVALID_ATIME;
if (sattr->ia_valid & ATTR_MTIME)
adjust_flags |= NFS_INO_INVALID_MTIME;
do { do {
nfs4_bitmap_copy_adjust(bitmask, nfs4_bitmask(server, fattr->label), nfs4_bitmap_copy_adjust(bitmask, nfs4_bitmask(server, fattr->label),