+++ /dev/null
-From 102f8eb622ca6d1bf0ac754a29fcf4c9540f2aa4 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 5 Jul 2023 14:58:10 -0400
-Subject: fs: add ctime accessors infrastructure
-
-From: Jeff Layton <jlayton@kernel.org>
-
-[ Upstream commit 9b6304c1d53745c300b86f202d0dcff395e2d2db ]
-
-struct timespec64 has unused bits in the tv_nsec field that can be used
-for other purposes. In future patches, we're going to change how the
-inode->i_ctime is accessed in certain inodes in order to make use of
-them. In order to do that safely though, we'll need to eradicate raw
-accesses of the inode->i_ctime field from the kernel.
-
-Add new accessor functions for the ctime that we use to replace them.
-
-Reviewed-by: Jan Kara <jack@suse.cz>
-Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
-Signed-off-by: Jeff Layton <jlayton@kernel.org>
-Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
-Message-Id: <20230705185812.579118-2-jlayton@kernel.org>
-Signed-off-by: Christian Brauner <brauner@kernel.org>
-Stable-dep-of: 5923d6686a10 ("smb3: fix caching of ctime on setxattr")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- fs/inode.c | 16 ++++++++++++++++
- include/linux/fs.h | 45 ++++++++++++++++++++++++++++++++++++++++++++-
- 2 files changed, 60 insertions(+), 1 deletion(-)
-
-diff --git a/fs/inode.c b/fs/inode.c
-index 7cb048a3b3bdb..ec41a11e2f8fe 100644
---- a/fs/inode.c
-+++ b/fs/inode.c
-@@ -2335,6 +2335,22 @@ struct timespec64 current_time(struct inode *inode)
- }
- EXPORT_SYMBOL(current_time);
-
-+/**
-+ * inode_set_ctime_current - set the ctime to current_time
-+ * @inode: inode
-+ *
-+ * Set the inode->i_ctime to the current value for the inode. Returns
-+ * the current value that was assigned to i_ctime.
-+ */
-+struct timespec64 inode_set_ctime_current(struct inode *inode)
-+{
-+ struct timespec64 now = current_time(inode);
-+
-+ inode_set_ctime(inode, now.tv_sec, now.tv_nsec);
-+ return now;
-+}
-+EXPORT_SYMBOL(inode_set_ctime_current);
-+
- /**
- * in_group_or_capable - check whether caller is CAP_FSETID privileged
- * @mnt_userns: user namespace of the mount @inode was found from
-diff --git a/include/linux/fs.h b/include/linux/fs.h
-index 6bba7a58c95c6..6f287fac0ecee 100644
---- a/include/linux/fs.h
-+++ b/include/linux/fs.h
-@@ -1722,7 +1722,50 @@ static inline bool fsuidgid_has_mapping(struct super_block *sb,
- kgid_has_mapping(fs_userns, kgid);
- }
-
--extern struct timespec64 current_time(struct inode *inode);
-+struct timespec64 current_time(struct inode *inode);
-+struct timespec64 inode_set_ctime_current(struct inode *inode);
-+
-+/**
-+ * inode_get_ctime - fetch the current ctime from the inode
-+ * @inode: inode from which to fetch ctime
-+ *
-+ * Grab the current ctime from the inode and return it.
-+ */
-+static inline struct timespec64 inode_get_ctime(const struct inode *inode)
-+{
-+ return inode->i_ctime;
-+}
-+
-+/**
-+ * inode_set_ctime_to_ts - set the ctime in the inode
-+ * @inode: inode in which to set the ctime
-+ * @ts: value to set in the ctime field
-+ *
-+ * Set the ctime in @inode to @ts
-+ */
-+static inline struct timespec64 inode_set_ctime_to_ts(struct inode *inode,
-+ struct timespec64 ts)
-+{
-+ inode->i_ctime = ts;
-+ return ts;
-+}
-+
-+/**
-+ * inode_set_ctime - set the ctime in the inode
-+ * @inode: inode in which to set the ctime
-+ * @sec: tv_sec value to set
-+ * @nsec: tv_nsec value to set
-+ *
-+ * Set the ctime in @inode to { @sec, @nsec }
-+ */
-+static inline struct timespec64 inode_set_ctime(struct inode *inode,
-+ time64_t sec, long nsec)
-+{
-+ struct timespec64 ts = { .tv_sec = sec,
-+ .tv_nsec = nsec };
-+
-+ return inode_set_ctime_to_ts(inode, ts);
-+}
-
- /*
- * Snapshotting support.
---
-2.42.0
-