diff mbox series

[2/3] NFS: Don't revalidate attributes that are not being asked for

Message ID 20210324195311.577373-2-trondmy@kernel.org (mailing list archive)
State New
Headers show
Series [1/3] NFS: Fix up revalidation of space used | expand

Commit Message

trondmy@kernel.org March 24, 2021, 7:53 p.m. UTC
From: Trond Myklebust <trond.myklebust@hammerspace.com>

If the user doesn't set STATX_UID/GID/MODE, then don't care if they are
known to be stale. Ditto if we're not being asked for the file size.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
---
 fs/nfs/inode.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)
diff mbox series

Patch

diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
index 398f814ff8f8..001a6e4aabfd 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
@@ -852,12 +852,20 @@  int nfs_getattr(struct user_namespace *mnt_userns, const struct path *path,
 	/* Check whether the cached attributes are stale */
 	do_update |= force_sync || nfs_attribute_cache_expired(inode);
 	cache_validity = READ_ONCE(NFS_I(inode)->cache_validity);
-	do_update |= cache_validity &
-		(NFS_INO_INVALID_ATTR|NFS_INO_INVALID_LABEL);
+	do_update |= cache_validity & NFS_INO_INVALID_CHANGE;
 	if (request_mask & STATX_ATIME)
 		do_update |= cache_validity & NFS_INO_INVALID_ATIME;
-	if (request_mask & (STATX_CTIME|STATX_MTIME))
-		do_update |= cache_validity & NFS_INO_REVAL_PAGECACHE;
+	if (request_mask & STATX_CTIME)
+		do_update |= cache_validity &
+			     (NFS_INO_INVALID_CTIME | NFS_INO_REVAL_PAGECACHE);
+	if (request_mask & STATX_MTIME)
+		do_update |= cache_validity &
+			     (NFS_INO_INVALID_MTIME | NFS_INO_REVAL_PAGECACHE);
+	if (request_mask & STATX_SIZE)
+		do_update |= cache_validity &
+			     (NFS_INO_INVALID_SIZE | NFS_INO_REVAL_PAGECACHE);
+	if (request_mask & (STATX_UID | STATX_GID | STATX_MODE | STATX_NLINK))
+		do_update |= cache_validity & NFS_INO_INVALID_OTHER;
 	if (request_mask & STATX_BLOCKS)
 		do_update |= cache_validity & NFS_INO_INVALID_BLOCKS;
 	if (do_update) {