]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
nfs: split nfs_update_timestamps
authorChristoph Hellwig <hch@lst.de>
Thu, 8 Jan 2026 14:19:03 +0000 (15:19 +0100)
committerChristian Brauner <brauner@kernel.org>
Mon, 12 Jan 2026 13:01:32 +0000 (14:01 +0100)
The VFS paths update either the atime or ctime and mtime but never mix
between atime and the others.  Split nfs_update_timestamps to match this
to prepare for cleaning up the VFS interfaces.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://patch.msgid.link/20260108141934.2052404-4-hch@lst.de
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/nfs/inode.c

index 84049f3cd34052b2aaed4a0137c62303d2f3ea37..3be8ba7b98c51ee728e34ade84980f6174a7b4a6 100644 (file)
@@ -669,35 +669,31 @@ static void nfs_set_timestamps_to_ts(struct inode *inode, struct iattr *attr)
        NFS_I(inode)->cache_validity &= ~cache_flags;
 }
 
-static void nfs_update_timestamps(struct inode *inode, unsigned int ia_valid)
+static void nfs_update_atime(struct inode *inode)
 {
-       enum file_time_flags time_flags = 0;
-       unsigned int cache_flags = 0;
+       inode_update_timestamps(inode, S_ATIME);
+       NFS_I(inode)->cache_validity &= ~NFS_INO_INVALID_ATIME;
+}
 
-       if (ia_valid & ATTR_MTIME) {
-               time_flags |= S_MTIME | S_CTIME;
-               cache_flags |= NFS_INO_INVALID_CTIME | NFS_INO_INVALID_MTIME;
-       }
-       if (ia_valid & ATTR_ATIME) {
-               time_flags |= S_ATIME;
-               cache_flags |= NFS_INO_INVALID_ATIME;
-       }
-       inode_update_timestamps(inode, time_flags);
-       NFS_I(inode)->cache_validity &= ~cache_flags;
+static void nfs_update_mtime(struct inode *inode)
+{
+       inode_update_timestamps(inode, S_MTIME | S_CTIME);
+       NFS_I(inode)->cache_validity &=
+               ~(NFS_INO_INVALID_CTIME | NFS_INO_INVALID_MTIME);
 }
 
 void nfs_update_delegated_atime(struct inode *inode)
 {
        spin_lock(&inode->i_lock);
        if (nfs_have_delegated_atime(inode))
-               nfs_update_timestamps(inode, ATTR_ATIME);
+               nfs_update_atime(inode);
        spin_unlock(&inode->i_lock);
 }
 
 void nfs_update_delegated_mtime_locked(struct inode *inode)
 {
        if (nfs_have_delegated_mtime(inode))
-               nfs_update_timestamps(inode, ATTR_MTIME);
+               nfs_update_mtime(inode);
 }
 
 void nfs_update_delegated_mtime(struct inode *inode)
@@ -747,7 +743,10 @@ nfs_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
                                                ATTR_ATIME|ATTR_ATIME_SET);
                        }
                } else {
-                       nfs_update_timestamps(inode, attr->ia_valid);
+                       if (attr->ia_valid & ATTR_MTIME)
+                               nfs_update_mtime(inode);
+                       if (attr->ia_valid & ATTR_ATIME)
+                               nfs_update_atime(inode);
                        attr->ia_valid &= ~(ATTR_MTIME|ATTR_ATIME);
                }
                spin_unlock(&inode->i_lock);