* [PATCH 02/87] fs: convert core infrastructure to new {a,m}time accessors
2023-09-28 11:02 [PATCH 00/87] fs: new accessor methods for atime and mtime Jeff Layton
@ 2023-09-28 11:02 ` Jeff Layton
2023-09-28 11:02 ` [PATCH 44/87] fs/hugetlbfs: convert to new inode " Jeff Layton
2023-09-28 11:03 ` [PATCH 80/87] mm: " Jeff Layton
2023-09-28 11:03 ` [PATCH 01/87] fs: new accessor methods for atime and mtime Jeff Layton
1 sibling, 2 replies; 5+ messages in thread
From: Jeff Layton @ 2023-09-28 11:02 UTC (permalink / raw)
To: Alexander Viro, Christian Brauner, linux-fsdevel, linux-kernel
Cc: Eric Biederman, Kees Cook, linux-mm
Convert the core filesystem code to use the new atime and mtime accessor
functions.
Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
fs/attr.c | 4 ++--
fs/bad_inode.c | 2 +-
fs/binfmt_misc.c | 2 +-
fs/inode.c | 35 +++++++++++++++++++++--------------
fs/libfs.c | 32 +++++++++++++++++++-------------
fs/nsfs.c | 2 +-
fs/pipe.c | 2 +-
fs/stack.c | 4 ++--
fs/stat.c | 4 ++--
include/linux/fs_stack.h | 6 +++---
10 files changed, 53 insertions(+), 40 deletions(-)
diff --git a/fs/attr.c b/fs/attr.c
index a8ae5f6d9b16..bdf5deb06ea9 100644
--- a/fs/attr.c
+++ b/fs/attr.c
@@ -308,9 +308,9 @@ void setattr_copy(struct mnt_idmap *idmap, struct inode *inode,
i_uid_update(idmap, attr, inode);
i_gid_update(idmap, attr, inode);
if (ia_valid & ATTR_ATIME)
- inode->i_atime = attr->ia_atime;
+ inode_set_atime_to_ts(inode, attr->ia_atime);
if (ia_valid & ATTR_MTIME)
- inode->i_mtime = attr->ia_mtime;
+ inode_set_mtime_to_ts(inode, attr->ia_mtime);
if (ia_valid & ATTR_CTIME)
inode_set_ctime_to_ts(inode, attr->ia_ctime);
if (ia_valid & ATTR_MODE) {
diff --git a/fs/bad_inode.c b/fs/bad_inode.c
index 83f9566c973b..316d88da2ce1 100644
--- a/fs/bad_inode.c
+++ b/fs/bad_inode.c
@@ -208,7 +208,7 @@ void make_bad_inode(struct inode *inode)
remove_inode_hash(inode);
inode->i_mode = S_IFREG;
- inode->i_atime = inode->i_mtime = inode_set_ctime_current(inode);
+ simple_inode_init_ts(inode);
inode->i_op = &bad_inode_ops;
inode->i_opflags &= ~IOP_XATTR;
inode->i_fop = &bad_file_ops;
diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c
index e0108d17b085..5d2be9b0a0a5 100644
--- a/fs/binfmt_misc.c
+++ b/fs/binfmt_misc.c
@@ -547,7 +547,7 @@ static struct inode *bm_get_inode(struct super_block *sb, int mode)
if (inode) {
inode->i_ino = get_next_ino();
inode->i_mode = mode;
- inode->i_atime = inode->i_mtime = inode_set_ctime_current(inode);
+ simple_inode_init_ts(inode);
}
return inode;
}
diff --git a/fs/inode.c b/fs/inode.c
index 84bc3c76e5cc..0612ad9c0227 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -1837,27 +1837,29 @@ EXPORT_SYMBOL(bmap);
static int relatime_need_update(struct vfsmount *mnt, struct inode *inode,
struct timespec64 now)
{
- struct timespec64 ctime;
+ struct timespec64 atime, mtime, ctime;
if (!(mnt->mnt_flags & MNT_RELATIME))
return 1;
/*
* Is mtime younger than or equal to atime? If yes, update atime:
*/
- if (timespec64_compare(&inode->i_mtime, &inode->i_atime) >= 0)
+ atime = inode_get_atime(inode);
+ mtime = inode_get_mtime(inode);
+ if (timespec64_compare(&mtime, &atime) >= 0)
return 1;
/*
* Is ctime younger than or equal to atime? If yes, update atime:
*/
ctime = inode_get_ctime(inode);
- if (timespec64_compare(&ctime, &inode->i_atime) >= 0)
+ if (timespec64_compare(&ctime, &atime) >= 0)
return 1;
/*
* Is the previous atime value older than a day? If yes,
* update atime:
*/
- if ((long)(now.tv_sec - inode->i_atime.tv_sec) >= 24*60*60)
+ if ((long)(now.tv_sec - atime.tv_sec) >= 24*60*60)
return 1;
/*
* Good, we can skip the atime update:
@@ -1888,12 +1890,13 @@ int inode_update_timestamps(struct inode *inode, int flags)
if (flags & (S_MTIME|S_CTIME|S_VERSION)) {
struct timespec64 ctime = inode_get_ctime(inode);
+ struct timespec64 mtime = inode_get_mtime(inode);
now = inode_set_ctime_current(inode);
if (!timespec64_equal(&now, &ctime))
updated |= S_CTIME;
- if (!timespec64_equal(&now, &inode->i_mtime)) {
- inode->i_mtime = now;
+ if (!timespec64_equal(&now, &mtime)) {
+ inode_set_mtime_to_ts(inode, now);
updated |= S_MTIME;
}
if (IS_I_VERSION(inode) && inode_maybe_inc_iversion(inode, updated))
@@ -1903,8 +1906,10 @@ int inode_update_timestamps(struct inode *inode, int flags)
}
if (flags & S_ATIME) {
- if (!timespec64_equal(&now, &inode->i_atime)) {
- inode->i_atime = now;
+ struct timespec64 atime = inode_get_atime(inode);
+
+ if (!timespec64_equal(&now, &atime)) {
+ inode_set_atime_to_ts(inode, now);
updated |= S_ATIME;
}
}
@@ -1963,7 +1968,7 @@ EXPORT_SYMBOL(inode_update_time);
bool atime_needs_update(const struct path *path, struct inode *inode)
{
struct vfsmount *mnt = path->mnt;
- struct timespec64 now;
+ struct timespec64 now, atime;
if (inode->i_flags & S_NOATIME)
return false;
@@ -1989,7 +1994,8 @@ bool atime_needs_update(const struct path *path, struct inode *inode)
if (!relatime_need_update(mnt, inode, now))
return false;
- if (timespec64_equal(&inode->i_atime, &now))
+ atime = inode_get_atime(inode);
+ if (timespec64_equal(&atime, &now))
return false;
return true;
@@ -2106,17 +2112,18 @@ static int inode_needs_update_time(struct inode *inode)
{
int sync_it = 0;
struct timespec64 now = current_time(inode);
- struct timespec64 ctime;
+ struct timespec64 ts;
/* First try to exhaust all avenues to not sync */
if (IS_NOCMTIME(inode))
return 0;
- if (!timespec64_equal(&inode->i_mtime, &now))
+ ts = inode_get_mtime(inode);
+ if (!timespec64_equal(&ts, &now))
sync_it = S_MTIME;
- ctime = inode_get_ctime(inode);
- if (!timespec64_equal(&ctime, &now))
+ ts = inode_get_ctime(inode);
+ if (!timespec64_equal(&ts, &now))
sync_it |= S_CTIME;
if (IS_I_VERSION(inode) && inode_iversion_need_inc(inode))
diff --git a/fs/libfs.c b/fs/libfs.c
index f5cdc7f7f5b5..abe2b5a40ba1 100644
--- a/fs/libfs.c
+++ b/fs/libfs.c
@@ -541,7 +541,8 @@ void simple_recursive_removal(struct dentry *dentry,
dput(victim); // unpin it
}
if (victim == dentry) {
- inode->i_mtime = inode_set_ctime_current(inode);
+ inode_set_mtime_to_ts(inode,
+ inode_set_ctime_current(inode));
if (d_is_dir(dentry))
drop_nlink(inode);
inode_unlock(inode);
@@ -582,7 +583,7 @@ static int pseudo_fs_fill_super(struct super_block *s, struct fs_context *fc)
*/
root->i_ino = 1;
root->i_mode = S_IFDIR | S_IRUSR | S_IWUSR;
- root->i_atime = root->i_mtime = inode_set_ctime_current(root);
+ simple_inode_init_ts(root);
s->s_root = d_make_root(root);
if (!s->s_root)
return -ENOMEM;
@@ -638,8 +639,8 @@ int simple_link(struct dentry *old_dentry, struct inode *dir, struct dentry *den
{
struct inode *inode = d_inode(old_dentry);
- dir->i_mtime = inode_set_ctime_to_ts(dir,
- inode_set_ctime_current(inode));
+ inode_set_mtime_to_ts(dir,
+ inode_set_ctime_to_ts(dir, inode_set_ctime_current(inode)));
inc_nlink(inode);
ihold(inode);
dget(dentry);
@@ -673,8 +674,8 @@ int simple_unlink(struct inode *dir, struct dentry *dentry)
{
struct inode *inode = d_inode(dentry);
- dir->i_mtime = inode_set_ctime_to_ts(dir,
- inode_set_ctime_current(inode));
+ inode_set_mtime_to_ts(dir,
+ inode_set_ctime_to_ts(dir, inode_set_ctime_current(inode)));
drop_nlink(inode);
dput(dentry);
return 0;
@@ -709,9 +710,10 @@ void simple_rename_timestamp(struct inode *old_dir, struct dentry *old_dentry,
{
struct inode *newino = d_inode(new_dentry);
- old_dir->i_mtime = inode_set_ctime_current(old_dir);
+ inode_set_mtime_to_ts(old_dir, inode_set_ctime_current(old_dir));
if (new_dir != old_dir)
- new_dir->i_mtime = inode_set_ctime_current(new_dir);
+ inode_set_mtime_to_ts(new_dir,
+ inode_set_ctime_current(new_dir));
inode_set_ctime_current(d_inode(old_dentry));
if (newino)
inode_set_ctime_current(newino);
@@ -926,7 +928,7 @@ int simple_fill_super(struct super_block *s, unsigned long magic,
*/
inode->i_ino = 1;
inode->i_mode = S_IFDIR | 0755;
- inode->i_atime = inode->i_mtime = inode_set_ctime_current(inode);
+ simple_inode_init_ts(inode);
inode->i_op = &simple_dir_inode_operations;
inode->i_fop = &simple_dir_operations;
set_nlink(inode, 2);
@@ -952,7 +954,7 @@ int simple_fill_super(struct super_block *s, unsigned long magic,
goto out;
}
inode->i_mode = S_IFREG | files->mode;
- inode->i_atime = inode->i_mtime = inode_set_ctime_current(inode);
+ simple_inode_init_ts(inode);
inode->i_fop = files->ops;
inode->i_ino = i;
d_add(dentry, inode);
@@ -1520,7 +1522,7 @@ struct inode *alloc_anon_inode(struct super_block *s)
inode->i_uid = current_fsuid();
inode->i_gid = current_fsgid();
inode->i_flags |= S_PRIVATE;
- inode->i_atime = inode->i_mtime = inode_set_ctime_current(inode);
+ simple_inode_init_ts(inode);
return inode;
}
EXPORT_SYMBOL(alloc_anon_inode);
@@ -1920,8 +1922,12 @@ EXPORT_SYMBOL_GPL(direct_write_fallback);
* When a new inode is created, most filesystems set the timestamps to the
* current time. Add a helper to do this.
*/
-struct timespec64 simple_inode_init_ts(struct inode *inode);
+struct timespec64 simple_inode_init_ts(struct inode *inode)
{
- return inode->i_atime = inode->i_mtime = inode_set_ctime_current(inode);
+ struct timespec64 ts = inode_set_ctime_current(inode);
+
+ inode_set_atime_to_ts(inode, ts);
+ inode_set_mtime_to_ts(inode, ts);
+ return ts;
}
EXPORT_SYMBOL(simple_inode_init_ts);
diff --git a/fs/nsfs.c b/fs/nsfs.c
index 647a22433bd8..9a4b228d42fa 100644
--- a/fs/nsfs.c
+++ b/fs/nsfs.c
@@ -84,7 +84,7 @@ static int __ns_get_path(struct path *path, struct ns_common *ns)
return -ENOMEM;
}
inode->i_ino = ns->inum;
- inode->i_mtime = inode->i_atime = inode_set_ctime_current(inode);
+ simple_inode_init_ts(inode);
inode->i_flags |= S_IMMUTABLE;
inode->i_mode = S_IFREG | S_IRUGO;
inode->i_fop = &ns_file_operations;
diff --git a/fs/pipe.c b/fs/pipe.c
index 139190165a1c..b96a5918d064 100644
--- a/fs/pipe.c
+++ b/fs/pipe.c
@@ -898,7 +898,7 @@ static struct inode * get_pipe_inode(void)
inode->i_mode = S_IFIFO | S_IRUSR | S_IWUSR;
inode->i_uid = current_fsuid();
inode->i_gid = current_fsgid();
- inode->i_atime = inode->i_mtime = inode_set_ctime_current(inode);
+ simple_inode_init_ts(inode);
return inode;
diff --git a/fs/stack.c b/fs/stack.c
index b5e01bdb5f5f..f18920119944 100644
--- a/fs/stack.c
+++ b/fs/stack.c
@@ -66,8 +66,8 @@ void fsstack_copy_attr_all(struct inode *dest, const struct inode *src)
dest->i_uid = src->i_uid;
dest->i_gid = src->i_gid;
dest->i_rdev = src->i_rdev;
- dest->i_atime = src->i_atime;
- dest->i_mtime = src->i_mtime;
+ inode_set_atime_to_ts(dest, inode_get_atime(src));
+ inode_set_mtime_to_ts(dest, inode_get_mtime(src));
inode_set_ctime_to_ts(dest, inode_get_ctime(src));
dest->i_blkbits = src->i_blkbits;
dest->i_flags = src->i_flags;
diff --git a/fs/stat.c b/fs/stat.c
index d43a5cc1bfa4..24bb0209e459 100644
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -57,8 +57,8 @@ void generic_fillattr(struct mnt_idmap *idmap, u32 request_mask,
stat->gid = vfsgid_into_kgid(vfsgid);
stat->rdev = inode->i_rdev;
stat->size = i_size_read(inode);
- stat->atime = inode->i_atime;
- stat->mtime = inode->i_mtime;
+ stat->atime = inode_get_atime(inode);
+ stat->mtime = inode_get_mtime(inode);
stat->ctime = inode_get_ctime(inode);
stat->blksize = i_blocksize(inode);
stat->blocks = inode->i_blocks;
diff --git a/include/linux/fs_stack.h b/include/linux/fs_stack.h
index 010d39d0dc1c..2b1f74b24070 100644
--- a/include/linux/fs_stack.h
+++ b/include/linux/fs_stack.h
@@ -16,14 +16,14 @@ extern void fsstack_copy_inode_size(struct inode *dst, struct inode *src);
static inline void fsstack_copy_attr_atime(struct inode *dest,
const struct inode *src)
{
- dest->i_atime = src->i_atime;
+ inode_set_atime_to_ts(dest, inode_get_atime(src));
}
static inline void fsstack_copy_attr_times(struct inode *dest,
const struct inode *src)
{
- dest->i_atime = src->i_atime;
- dest->i_mtime = src->i_mtime;
+ inode_set_atime_to_ts(dest, inode_get_atime(src));
+ inode_set_mtime_to_ts(dest, inode_get_mtime(src));
inode_set_ctime_to_ts(dest, inode_get_ctime(src));
}
--
2.41.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 44/87] fs/hugetlbfs: convert to new inode {a,m}time accessors
2023-09-28 11:02 ` [PATCH 02/87] fs: convert core infrastructure to new {a,m}time accessors Jeff Layton
@ 2023-09-28 11:02 ` Jeff Layton
2023-09-28 11:03 ` [PATCH 80/87] mm: " Jeff Layton
1 sibling, 0 replies; 5+ messages in thread
From: Jeff Layton @ 2023-09-28 11:02 UTC (permalink / raw)
To: Alexander Viro, Christian Brauner, linux-fsdevel, linux-kernel; +Cc: linux-mm
Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
fs/hugetlbfs/inode.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
index 316c4cebd3f3..da217eaba102 100644
--- a/fs/hugetlbfs/inode.c
+++ b/fs/hugetlbfs/inode.c
@@ -980,7 +980,7 @@ static struct inode *hugetlbfs_get_root(struct super_block *sb,
inode->i_mode = S_IFDIR | ctx->mode;
inode->i_uid = ctx->uid;
inode->i_gid = ctx->gid;
- inode->i_atime = inode->i_mtime = inode_set_ctime_current(inode);
+ simple_inode_init_ts(inode);
inode->i_op = &hugetlbfs_dir_inode_operations;
inode->i_fop = &simple_dir_operations;
/* directory inodes start off with i_nlink == 2 (for "." entry) */
@@ -1024,7 +1024,7 @@ static struct inode *hugetlbfs_get_inode(struct super_block *sb,
lockdep_set_class(&inode->i_mapping->i_mmap_rwsem,
&hugetlbfs_i_mmap_rwsem_key);
inode->i_mapping->a_ops = &hugetlbfs_aops;
- inode->i_atime = inode->i_mtime = inode_set_ctime_current(inode);
+ simple_inode_init_ts(inode);
inode->i_mapping->private_data = resv_map;
info->seals = F_SEAL_SEAL;
switch (mode & S_IFMT) {
@@ -1067,7 +1067,7 @@ static int hugetlbfs_mknod(struct mnt_idmap *idmap, struct inode *dir,
inode = hugetlbfs_get_inode(dir->i_sb, dir, mode, dev);
if (!inode)
return -ENOSPC;
- dir->i_mtime = inode_set_ctime_current(dir);
+ inode_set_mtime_to_ts(dir, inode_set_ctime_current(dir));
d_instantiate(dentry, inode);
dget(dentry);/* Extra count - pin the dentry in core */
return 0;
@@ -1099,7 +1099,7 @@ static int hugetlbfs_tmpfile(struct mnt_idmap *idmap,
inode = hugetlbfs_get_inode(dir->i_sb, dir, mode | S_IFREG, 0);
if (!inode)
return -ENOSPC;
- dir->i_mtime = inode_set_ctime_current(dir);
+ inode_set_mtime_to_ts(dir, inode_set_ctime_current(dir));
d_tmpfile(file, inode);
return finish_open_simple(file, 0);
}
@@ -1121,7 +1121,7 @@ static int hugetlbfs_symlink(struct mnt_idmap *idmap,
} else
iput(inode);
}
- dir->i_mtime = inode_set_ctime_current(dir);
+ inode_set_mtime_to_ts(dir, inode_set_ctime_current(dir));
return error;
}
--
2.41.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 00/87] fs: new accessor methods for atime and mtime
@ 2023-09-28 11:02 Jeff Layton
2023-09-28 11:02 ` [PATCH 02/87] fs: convert core infrastructure to new {a,m}time accessors Jeff Layton
2023-09-28 11:03 ` [PATCH 01/87] fs: new accessor methods for atime and mtime Jeff Layton
0 siblings, 2 replies; 5+ messages in thread
From: Jeff Layton @ 2023-09-28 11:02 UTC (permalink / raw)
To: Alexander Viro, Christian Brauner, Linus Torvalds, David Sterba,
Amir Goldstein, Theodore Ts'o, Eric Biederman, Kees Cook,
Jeremy Kerr, Arnd Bergmann, Michael Ellerman, Nicholas Piggin,
Christophe Leroy, Heiko Carstens, Vasily Gorbik,
Alexander Gordeev, Christian Borntraeger, Sven Schnelle,
Greg Kroah-Hartman, Arve Hjønnevåg, Todd Kjos,
Martijn Coenen, Joel Fernandes, Carlos Llamas,
Suren Baghdasaryan, Mattia Dongili, Dennis Dalessandro,
Jason Gunthorpe, Leon Romanovsky, Brad Warrum, Ritu Agarwal,
Hans de Goede, Ilpo Järvinen, Mark Gross, Jiri Slaby,
Eric Van Hensbergen, Latchesar Ionkov, Dominique Martinet,
Christian Schoenebeck, David Sterba, David Howells, Marc Dionne,
Ian Kent, Luis de Bethencourt, Salah Triki, Tigran A. Aivazian,
Chris Mason, Josef Bacik, Xiubo Li, Ilya Dryomov, Jan Harkes,
coda, Joel Becker, Christoph Hellwig, Nicolas Pitre,
Rafael J. Wysocki, Ard Biesheuvel, Gao Xiang, Chao Yu, Yue Hu,
Jeffle Xu, Namjae Jeon, Sungjong Seo, Jan Kara, Andreas Dilger,
Jaegeuk Kim, OGAWA Hirofumi, Christoph Hellwig, Miklos Szeredi,
Bob Peterson, Andreas Gruenbacher, Richard Weinberger,
Anton Ivanov, Johannes Berg, Mikulas Patocka, Mike Kravetz,
Muchun Song, Jan Kara, David Woodhouse, Dave Kleikamp, Tejun Heo,
Trond Myklebust, Anna Schumaker, Chuck Lever, Neil Brown,
Olga Kornievskaia, Dai Ngo, Tom Talpey, Ryusuke Konishi,
Anton Altaparmakov, Konstantin Komarov, Mark Fasheh, Joseph Qi,
Bob Copeland, Mike Marshall, Martin Brandenburg,
Luis Chamberlain, Iurii Zaikin, Tony Luck, Guilherme G. Piccoli,
Anders Larsen, Steve French, Paulo Alcantara, Ronnie Sahlberg,
Shyam Prasad N, Sergey Senozhatsky, Phillip Lougher,
Steven Rostedt, Masami Hiramatsu, Evgeniy Dushistov,
Chandan Babu R, Darrick J. Wong, Damien Le Moal, Naohiro Aota,
Johannes Thumshirn, Alexei Starovoitov, Daniel Borkmann,
Andrii Nakryiko, Martin KaFai Lau, Song Liu, Yonghong Song,
John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
Hugh Dickins, Andrew Morton, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, John Johansen, Paul Moore,
James Morris, Serge E. Hallyn, Stephen Smalley, Eric Paris
Cc: linux-fsdevel, linux-kernel, linux-mm, linuxppc-dev, linux-s390,
platform-driver-x86, linux-rdma, linux-serial, linux-usb, v9fs,
linux-afs, autofs, linux-btrfs, ceph-devel, codalist, linux-efi,
linux-erofs, linux-ext4, linux-f2fs-devel, gfs2, linux-um,
linux-mtd, jfs-discussion, linux-nfs, linux-nilfs,
linux-ntfs-dev, ntfs3, ocfs2-devel, linux-karma-devel, devel,
linux-unionfs, linux-hardening, reiserfs-devel, linux-cifs,
samba-technical, linux-trace-kernel, linux-xfs, bpf, netdev,
apparmor, linux-security-module, selinux
While working on the multigrain timestamp changes, Linus suggested
adding some similar wrappers for accessing the atime and mtime that we
have for the ctime. With that, we could then move to using discrete
integers instead of timespec64 in struct inode, and shrink it.
Linus suggested using macros for the new accessors, but the existing
ctime wrappers were static inlines and since there are only 3 different
timestamps, I didn't see that trying to fiddle with macros would gain us
anything.
The first patches start with some new infrastructure, and then we move
to converting different subsystems to use it. The second to last patch
makes the conversion to discrete integers, which shaves 8 bytes off of
struct inode on my x86_64 kernel. The last patch reshuffles things a
bit more, to keep the i_lock in the same cacheline as the fields it
protects (at least on x86_64).
About 75% of this conversion was done with coccinelle, with the rest
done by hand with vim.
Jeff Layton (87):
fs: new accessor methods for atime and mtime
fs: convert core infrastructure to new {a,m}time accessors
arch/powerpc/platforms/cell/spufs: convert to new inode {a,m}time
accessors
arch/s390/hypfs: convert to new inode {a,m}time accessors
drivers/android: convert to new inode {a,m}time accessors
drivers/char: convert to new inode {a,m}time accessors
drivers/infiniband/hw/qib: convert to new inode {a,m}time accessors
drivers/misc/ibmasm: convert to new inode {a,m}time accessors
drivers/misc: convert to new inode {a,m}time accessors
drivers/platform/x86: convert to new inode {a,m}time accessors
drivers/tty: convert to new inode {a,m}time accessors
drivers/usb/core: convert to new inode {a,m}time accessors
drivers/usb/gadget/function: convert to new inode {a,m}time accessors
drivers/usb/gadget/legacy: convert to new inode {a,m}time accessors
fs/9p: convert to new inode {a,m}time accessors
fs/adfs: convert to new inode {a,m}time accessors
fs/affs: convert to new inode {a,m}time accessors
fs/afs: convert to new inode {a,m}time accessors
fs/autofs: convert to new inode {a,m}time accessors
fs/befs: convert to new inode {a,m}time accessors
fs/bfs: convert to new inode {a,m}time accessors
fs/btrfs: convert to new inode {a,m}time accessors
fs/ceph: convert to new inode {a,m}time accessors
fs/coda: convert to new inode {a,m}time accessors
fs/configfs: convert to new inode {a,m}time accessors
fs/cramfs: convert to new inode {a,m}time accessors
fs/debugfs: convert to new inode {a,m}time accessors
fs/devpts: convert to new inode {a,m}time accessors
fs/efivarfs: convert to new inode {a,m}time accessors
fs/efs: convert to new inode {a,m}time accessors
fs/erofs: convert to new inode {a,m}time accessors
fs/exfat: convert to new inode {a,m}time accessors
fs/ext2: convert to new inode {a,m}time accessors
fs/ext4: convert to new inode {a,m}time accessors
fs/f2fs: convert to new inode {a,m}time accessors
fs/fat: convert to new inode {a,m}time accessors
fs/freevxfs: convert to new inode {a,m}time accessors
fs/fuse: convert to new inode {a,m}time accessors
fs/gfs2: convert to new inode {a,m}time accessors
fs/hfs: convert to new inode {a,m}time accessors
fs/hfsplus: convert to new inode {a,m}time accessors
fs/hostfs: convert to new inode {a,m}time accessors
fs/hpfs: convert to new inode {a,m}time accessors
fs/hugetlbfs: convert to new inode {a,m}time accessors
fs/isofs: convert to new inode {a,m}time accessors
fs/jffs2: convert to new inode {a,m}time accessors
fs/jfs: convert to new inode {a,m}time accessors
fs/kernfs: convert to new inode {a,m}time accessors
fs/minix: convert to new inode {a,m}time accessors
fs/nfs: convert to new inode {a,m}time accessors
fs/nfsd: convert to new inode {a,m}time accessors
fs/nilfs2: convert to new inode {a,m}time accessors
fs/ntfs: convert to new inode {a,m}time accessors
fs/ntfs3: convert to new inode {a,m}time accessors
fs/ocfs2: convert to new inode {a,m}time accessors
fs/omfs: convert to new inode {a,m}time accessors
fs/openpromfs: convert to new inode {a,m}time accessors
fs/orangefs: convert to new inode {a,m}time accessors
fs/overlayfs: convert to new inode {a,m}time accessors
fs/proc: convert to new inode {a,m}time accessors
fs/pstore: convert to new inode {a,m}time accessors
fs/qnx4: convert to new inode {a,m}time accessors
fs/qnx6: convert to new inode {a,m}time accessors
fs/ramfs: convert to new inode {a,m}time accessors
fs/reiserfs: convert to new inode {a,m}time accessors
fs/romfs: convert to new inode {a,m}time accessors
fs/smb/client: convert to new inode {a,m}time accessors
fs/smb/server: convert to new inode {a,m}time accessors
fs/squashfs: convert to new inode {a,m}time accessors
fs/sysv: convert to new inode {a,m}time accessors
fs/tracefs: convert to new inode {a,m}time accessors
fs/ubifs: convert to new inode {a,m}time accessors
fs/udf: convert to new inode {a,m}time accessors
fs/ufs: convert to new inode {a,m}time accessors
fs/vboxsf: convert to new inode {a,m}time accessors
fs/xfs: convert to new inode {a,m}time accessors
fs/zonefs: convert to new inode {a,m}time accessors
ipc: convert to new inode {a,m}time accessors
kernel/bpf: convert to new inode {a,m}time accessors
mm: convert to new inode {a,m}time accessors
net/sunrpc: convert to new inode {a,m}time accessors
security/apparmor: convert to new inode {a,m}time accessors
security/selinux: convert to new inode {a,m}time accessors
security: convert to new inode {a,m}time accessors
fs: rename i_atime and i_mtime fields to __i_atime and __i_mtime
fs: switch timespec64 fields in inode to discrete integers
fs: move i_blocks up a few places in struct inode
arch/powerpc/platforms/cell/spufs/inode.c | 2 +-
arch/s390/hypfs/inode.c | 4 +-
drivers/android/binderfs.c | 8 +--
drivers/char/sonypi.c | 2 +-
drivers/infiniband/hw/qib/qib_fs.c | 4 +-
drivers/misc/ibmasm/ibmasmfs.c | 2 +-
drivers/misc/ibmvmc.c | 2 +-
drivers/platform/x86/sony-laptop.c | 2 +-
drivers/tty/tty_io.c | 10 +++-
drivers/usb/core/devio.c | 26 ++++++---
drivers/usb/gadget/function/f_fs.c | 4 +-
drivers/usb/gadget/legacy/inode.c | 2 +-
fs/9p/vfs_inode.c | 6 +-
fs/9p/vfs_inode_dotl.c | 16 +++---
fs/adfs/inode.c | 13 +++--
fs/affs/amigaffs.c | 4 +-
fs/affs/inode.c | 17 +++---
fs/afs/dynroot.c | 2 +-
fs/afs/inode.c | 8 +--
fs/afs/write.c | 2 +-
fs/attr.c | 4 +-
fs/autofs/inode.c | 2 +-
fs/autofs/root.c | 6 +-
fs/bad_inode.c | 2 +-
fs/befs/linuxvfs.c | 10 ++--
fs/bfs/dir.c | 9 +--
fs/bfs/inode.c | 10 ++--
fs/binfmt_misc.c | 2 +-
fs/btrfs/delayed-inode.c | 16 +++---
fs/btrfs/file.c | 18 +++---
fs/btrfs/inode.c | 39 ++++++-------
fs/btrfs/reflink.c | 2 +-
fs/btrfs/transaction.c | 3 +-
fs/btrfs/tree-log.c | 8 +--
fs/ceph/addr.c | 10 ++--
fs/ceph/caps.c | 4 +-
fs/ceph/file.c | 2 +-
fs/ceph/inode.c | 60 +++++++++++---------
fs/ceph/mds_client.c | 8 ++-
fs/ceph/snap.c | 4 +-
fs/coda/coda_linux.c | 6 +-
fs/coda/dir.c | 2 +-
fs/coda/file.c | 2 +-
fs/configfs/inode.c | 8 +--
fs/cramfs/inode.c | 4 +-
fs/debugfs/inode.c | 2 +-
fs/devpts/inode.c | 6 +-
fs/efivarfs/file.c | 2 +-
fs/efivarfs/inode.c | 2 +-
fs/efs/inode.c | 5 +-
fs/erofs/inode.c | 3 +-
fs/exfat/exfat_fs.h | 1 +
fs/exfat/file.c | 7 +--
fs/exfat/inode.c | 31 ++++++-----
fs/exfat/misc.c | 8 +++
fs/exfat/namei.c | 31 ++++++-----
fs/exfat/super.c | 4 +-
fs/ext2/dir.c | 6 +-
fs/ext2/ialloc.c | 2 +-
fs/ext2/inode.c | 11 ++--
fs/ext2/super.c | 2 +-
fs/ext4/ext4.h | 20 +++++--
fs/ext4/extents.c | 11 ++--
fs/ext4/ialloc.c | 4 +-
fs/ext4/inline.c | 4 +-
fs/ext4/inode.c | 19 ++++---
fs/ext4/ioctl.c | 13 ++++-
fs/ext4/namei.c | 10 ++--
fs/ext4/super.c | 2 +-
fs/ext4/xattr.c | 6 +-
fs/f2fs/dir.c | 6 +-
fs/f2fs/f2fs.h | 10 ++--
fs/f2fs/file.c | 14 ++---
fs/f2fs/inline.c | 2 +-
fs/f2fs/inode.c | 20 +++----
fs/f2fs/namei.c | 4 +-
fs/f2fs/recovery.c | 8 +--
fs/f2fs/super.c | 2 +-
fs/fat/inode.c | 25 ++++++---
fs/fat/misc.c | 6 +-
fs/freevxfs/vxfs_inode.c | 6 +-
fs/fuse/control.c | 2 +-
fs/fuse/dir.c | 6 +-
fs/fuse/inode.c | 25 ++++-----
fs/fuse/readdir.c | 6 +-
fs/gfs2/bmap.c | 10 ++--
fs/gfs2/dir.c | 10 ++--
fs/gfs2/glops.c | 11 ++--
fs/gfs2/inode.c | 7 ++-
fs/gfs2/quota.c | 2 +-
fs/gfs2/super.c | 8 +--
fs/hfs/catalog.c | 8 +--
fs/hfs/inode.c | 16 +++---
fs/hfs/sysdep.c | 10 ++--
fs/hfsplus/catalog.c | 8 +--
fs/hfsplus/inode.c | 22 ++++----
fs/hostfs/hostfs_kern.c | 12 ++--
fs/hpfs/dir.c | 10 ++--
fs/hpfs/inode.c | 12 ++--
fs/hpfs/namei.c | 20 +++----
fs/hpfs/super.c | 10 ++--
fs/hugetlbfs/inode.c | 10 ++--
fs/inode.c | 35 +++++++-----
fs/isofs/inode.c | 4 +-
fs/isofs/rock.c | 18 +++---
fs/jffs2/dir.c | 35 +++++++-----
fs/jffs2/file.c | 4 +-
fs/jffs2/fs.c | 20 +++----
fs/jffs2/os-linux.h | 4 +-
fs/jfs/inode.c | 2 +-
fs/jfs/jfs_imap.c | 16 +++---
fs/jfs/jfs_inode.c | 2 +-
fs/jfs/namei.c | 20 ++++---
fs/jfs/super.c | 2 +-
fs/kernfs/inode.c | 6 +-
fs/libfs.c | 41 ++++++++++----
fs/minix/bitmap.c | 2 +-
fs/minix/dir.c | 6 +-
fs/minix/inode.c | 15 +++--
fs/minix/itree_common.c | 2 +-
fs/nfs/callback_proc.c | 2 +-
fs/nfs/fscache.h | 4 +-
fs/nfs/inode.c | 30 +++++-----
fs/nfsd/blocklayout.c | 3 +-
fs/nfsd/nfs3proc.c | 4 +-
fs/nfsd/nfs4proc.c | 8 +--
fs/nfsd/nfsctl.c | 2 +-
fs/nilfs2/dir.c | 6 +-
fs/nilfs2/inode.c | 16 +++---
fs/nsfs.c | 2 +-
fs/ntfs/inode.c | 25 +++++----
fs/ntfs/mft.c | 2 +-
fs/ntfs3/file.c | 6 +-
fs/ntfs3/frecord.c | 11 ++--
fs/ntfs3/inode.c | 22 +++++---
fs/ntfs3/namei.c | 4 +-
fs/ocfs2/alloc.c | 2 +-
fs/ocfs2/aops.c | 6 +-
fs/ocfs2/dir.c | 5 +-
fs/ocfs2/dlmfs/dlmfs.c | 4 +-
fs/ocfs2/dlmglue.c | 29 +++++-----
fs/ocfs2/file.c | 26 +++++----
fs/ocfs2/inode.c | 24 ++++----
fs/ocfs2/namei.c | 8 +--
fs/ocfs2/refcounttree.c | 4 +-
fs/omfs/inode.c | 8 +--
fs/openpromfs/inode.c | 4 +-
fs/orangefs/orangefs-utils.c | 16 +++---
fs/overlayfs/file.c | 9 ++-
fs/overlayfs/inode.c | 3 +-
fs/overlayfs/util.c | 4 +-
fs/pipe.c | 2 +-
fs/proc/base.c | 2 +-
fs/proc/inode.c | 2 +-
fs/proc/proc_sysctl.c | 2 +-
fs/proc/self.c | 2 +-
fs/proc/thread_self.c | 2 +-
fs/pstore/inode.c | 5 +-
fs/qnx4/inode.c | 6 +-
fs/qnx6/inode.c | 6 +-
fs/ramfs/inode.c | 7 ++-
fs/reiserfs/inode.c | 22 +++-----
fs/reiserfs/namei.c | 8 +--
fs/reiserfs/stree.c | 5 +-
fs/reiserfs/super.c | 2 +-
fs/romfs/super.c | 3 +-
fs/smb/client/file.c | 18 +++---
fs/smb/client/fscache.h | 6 +-
fs/smb/client/inode.c | 17 +++---
fs/smb/client/smb2ops.c | 6 +-
fs/smb/server/smb2pdu.c | 8 +--
fs/squashfs/inode.c | 6 +-
fs/stack.c | 4 +-
fs/stat.c | 4 +-
fs/sysv/dir.c | 6 +-
fs/sysv/ialloc.c | 2 +-
fs/sysv/inode.c | 10 ++--
fs/sysv/itree.c | 2 +-
fs/tracefs/inode.c | 2 +-
fs/ubifs/debug.c | 8 +--
fs/ubifs/dir.c | 23 +++++---
fs/ubifs/file.c | 16 +++---
fs/ubifs/journal.c | 8 +--
fs/ubifs/super.c | 8 +--
fs/udf/ialloc.c | 4 +-
fs/udf/inode.c | 38 +++++++------
fs/udf/namei.c | 16 +++---
fs/ufs/dir.c | 6 +-
fs/ufs/ialloc.c | 2 +-
fs/ufs/inode.c | 36 +++++++-----
fs/vboxsf/utils.c | 15 ++---
fs/xfs/libxfs/xfs_inode_buf.c | 10 ++--
fs/xfs/libxfs/xfs_rtbitmap.c | 6 +-
fs/xfs/libxfs/xfs_trans_inode.c | 2 +-
fs/xfs/xfs_bmap_util.c | 7 ++-
fs/xfs/xfs_inode.c | 4 +-
fs/xfs/xfs_inode_item.c | 4 +-
fs/xfs/xfs_iops.c | 8 +--
fs/xfs/xfs_itable.c | 8 +--
fs/xfs/xfs_rtalloc.c | 30 +++++-----
fs/zonefs/super.c | 10 ++--
include/linux/fs.h | 68 +++++++++++++++++++++--
include/linux/fs_stack.h | 6 +-
ipc/mqueue.c | 19 ++++---
kernel/bpf/inode.c | 5 +-
mm/shmem.c | 20 +++----
net/sunrpc/rpc_pipe.c | 2 +-
security/apparmor/apparmorfs.c | 7 ++-
security/apparmor/policy_unpack.c | 4 +-
security/inode.c | 2 +-
security/selinux/selinuxfs.c | 2 +-
211 files changed, 1115 insertions(+), 906 deletions(-)
--
2.41.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 01/87] fs: new accessor methods for atime and mtime
2023-09-28 11:02 [PATCH 00/87] fs: new accessor methods for atime and mtime Jeff Layton
2023-09-28 11:02 ` [PATCH 02/87] fs: convert core infrastructure to new {a,m}time accessors Jeff Layton
@ 2023-09-28 11:03 ` Jeff Layton
1 sibling, 0 replies; 5+ messages in thread
From: Jeff Layton @ 2023-09-28 11:03 UTC (permalink / raw)
To: Alexander Viro, Christian Brauner, Linus Torvalds, David Sterba,
Amir Goldstein, Theodore Ts'o, Eric Biederman, Kees Cook,
Jeremy Kerr, Arnd Bergmann, Michael Ellerman, Nicholas Piggin,
Christophe Leroy, Heiko Carstens, Vasily Gorbik,
Alexander Gordeev, Christian Borntraeger, Sven Schnelle,
Greg Kroah-Hartman, Arve Hjønnevåg, Todd Kjos,
Martijn Coenen, Joel Fernandes, Carlos Llamas,
Suren Baghdasaryan, Mattia Dongili, Dennis Dalessandro,
Jason Gunthorpe, Leon Romanovsky, Brad Warrum, Ritu Agarwal,
Hans de Goede, Ilpo Järvinen, Mark Gross, Jiri Slaby,
Eric Van Hensbergen, Latchesar Ionkov, Dominique Martinet,
Christian Schoenebeck, David Sterba, David Howells, Marc Dionne,
Ian Kent, Luis de Bethencourt, Salah Triki, Tigran A. Aivazian,
Chris Mason, Josef Bacik, Xiubo Li, Ilya Dryomov, Jan Harkes,
coda, Joel Becker, Christoph Hellwig, Nicolas Pitre,
Rafael J. Wysocki, Ard Biesheuvel, Gao Xiang, Chao Yu, Yue Hu,
Jeffle Xu, Namjae Jeon, Sungjong Seo, Jan Kara, Andreas Dilger,
Jaegeuk Kim, OGAWA Hirofumi, Christoph Hellwig, Miklos Szeredi,
Bob Peterson, Andreas Gruenbacher, Richard Weinberger,
Anton Ivanov, Johannes Berg, Mikulas Patocka, Mike Kravetz,
Muchun Song, Jan Kara, David Woodhouse, Dave Kleikamp, Tejun Heo,
Trond Myklebust, Anna Schumaker, Chuck Lever, Neil Brown,
Olga Kornievskaia, Dai Ngo, Tom Talpey, Ryusuke Konishi,
Anton Altaparmakov, Konstantin Komarov, Mark Fasheh, Joseph Qi,
Bob Copeland, Mike Marshall, Martin Brandenburg,
Luis Chamberlain, Iurii Zaikin, Tony Luck, Guilherme G. Piccoli,
Anders Larsen, Steve French, Paulo Alcantara, Ronnie Sahlberg,
Shyam Prasad N, Sergey Senozhatsky, Phillip Lougher,
Steven Rostedt, Masami Hiramatsu, Evgeniy Dushistov,
Chandan Babu R, Darrick J. Wong, Damien Le Moal, Naohiro Aota,
Johannes Thumshirn, Alexei Starovoitov, Daniel Borkmann,
Andrii Nakryiko, Martin KaFai Lau, Song Liu, Yonghong Song,
John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
Hugh Dickins, Andrew Morton, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, John Johansen, Paul Moore,
James Morris, Serge E. Hallyn, Stephen Smalley, Eric Paris
Cc: linux-fsdevel, linux-kernel, linux-mm, linuxppc-dev, linux-s390,
platform-driver-x86, linux-rdma, linux-serial, linux-usb, v9fs,
linux-afs, autofs, linux-btrfs, ceph-devel, codalist, linux-efi,
linux-erofs, linux-ext4, linux-f2fs-devel, gfs2, linux-um,
linux-mtd, jfs-discussion, linux-nfs, linux-nilfs,
linux-ntfs-dev, ntfs3, ocfs2-devel, linux-karma-devel, devel,
linux-unionfs, linux-hardening, reiserfs-devel, linux-cifs,
samba-technical, linux-trace-kernel, linux-xfs, bpf, netdev,
apparmor, linux-security-module, selinux
Recently, we converted the ctime accesses in the kernel to use new
accessor functions. Linus recently pointed out though that if we add
accessors for the atime and mtime, then that would allow us to
seamlessly change how these timestamps are stored in the inode.
Add new accessor functions for the atime and mtime that mirror the
accessors for the ctime.
Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
fs/libfs.c | 13 +++++++++++++
include/linux/fs.h | 42 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 55 insertions(+)
diff --git a/fs/libfs.c b/fs/libfs.c
index 37f2d34ee090..f5cdc7f7f5b5 100644
--- a/fs/libfs.c
+++ b/fs/libfs.c
@@ -1912,3 +1912,16 @@ ssize_t direct_write_fallback(struct kiocb *iocb, struct iov_iter *iter,
return direct_written + buffered_written;
}
EXPORT_SYMBOL_GPL(direct_write_fallback);
+
+/**
+ * simple_inode_init_ts - initialize the timestamps for a new inode
+ * @inode: inode to be initialized
+ *
+ * When a new inode is created, most filesystems set the timestamps to the
+ * current time. Add a helper to do this.
+ */
+struct timespec64 simple_inode_init_ts(struct inode *inode);
+{
+ return inode->i_atime = inode->i_mtime = inode_set_ctime_current(inode);
+}
+EXPORT_SYMBOL(simple_inode_init_ts);
diff --git a/include/linux/fs.h b/include/linux/fs.h
index b528f063e8ff..12d247b82aa0 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1553,6 +1553,48 @@ static inline struct timespec64 inode_set_ctime(struct inode *inode,
return inode_set_ctime_to_ts(inode, ts);
}
+static inline struct timespec64 inode_get_atime(const struct inode *inode)
+{
+ return inode->i_atime;
+}
+
+static inline struct timespec64 inode_set_atime_to_ts(struct inode *inode,
+ struct timespec64 ts)
+{
+ inode->i_atime = ts;
+ return ts;
+}
+
+static inline struct timespec64 inode_set_atime(struct inode *inode,
+ time64_t sec, long nsec)
+{
+ struct timespec64 ts = { .tv_sec = sec,
+ .tv_nsec = nsec };
+ return inode_set_atime_to_ts(inode, ts);
+}
+
+static inline struct timespec64 inode_get_mtime(const struct inode *inode)
+{
+ return inode->i_mtime;
+}
+
+static inline struct timespec64 inode_set_mtime_to_ts(struct inode *inode,
+ struct timespec64 ts)
+{
+ inode->i_mtime = ts;
+ return ts;
+}
+
+static inline struct timespec64 inode_set_mtime(struct inode *inode,
+ time64_t sec, long nsec)
+{
+ struct timespec64 ts = { .tv_sec = sec,
+ .tv_nsec = nsec };
+ return inode_set_mtime_to_ts(inode, ts);
+}
+
+struct timespec64 simple_inode_init_ts(struct inode *inode);
+
/*
* Snapshotting support.
*/
--
2.41.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 80/87] mm: convert to new inode {a,m}time accessors
2023-09-28 11:02 ` [PATCH 02/87] fs: convert core infrastructure to new {a,m}time accessors Jeff Layton
2023-09-28 11:02 ` [PATCH 44/87] fs/hugetlbfs: convert to new inode " Jeff Layton
@ 2023-09-28 11:03 ` Jeff Layton
1 sibling, 0 replies; 5+ messages in thread
From: Jeff Layton @ 2023-09-28 11:03 UTC (permalink / raw)
To: Alexander Viro, Christian Brauner, linux-fsdevel, linux-kernel; +Cc: linux-mm
Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
mm/shmem.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/mm/shmem.c b/mm/shmem.c
index 69595d341882..c48239bfa646 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -1112,7 +1112,7 @@ static void shmem_undo_range(struct inode *inode, loff_t lstart, loff_t lend,
void shmem_truncate_range(struct inode *inode, loff_t lstart, loff_t lend)
{
shmem_undo_range(inode, lstart, lend, false);
- inode->i_mtime = inode_set_ctime_current(inode);
+ inode_set_mtime_to_ts(inode, inode_set_ctime_current(inode));
inode_inc_iversion(inode);
}
EXPORT_SYMBOL_GPL(shmem_truncate_range);
@@ -1224,7 +1224,7 @@ static int shmem_setattr(struct mnt_idmap *idmap,
if (!error && update_ctime) {
inode_set_ctime_current(inode);
if (update_mtime)
- inode->i_mtime = inode_get_ctime(inode);
+ inode_set_mtime_to_ts(inode, inode_get_ctime(inode));
inode_inc_iversion(inode);
}
return error;
@@ -2455,7 +2455,7 @@ static struct inode *__shmem_get_inode(struct mnt_idmap *idmap,
inode->i_ino = ino;
inode_init_owner(idmap, inode, dir, mode);
inode->i_blocks = 0;
- inode->i_atime = inode->i_mtime = inode_set_ctime_current(inode);
+ simple_inode_init_ts(inode);
inode->i_generation = get_random_u32();
info = SHMEM_I(inode);
memset(info, 0, (char *)inode - (char *)info);
@@ -2463,7 +2463,7 @@ static struct inode *__shmem_get_inode(struct mnt_idmap *idmap,
atomic_set(&info->stop_eviction, 0);
info->seals = F_SEAL_SEAL;
info->flags = flags & VM_NORESERVE;
- info->i_crtime = inode->i_mtime;
+ info->i_crtime = inode_get_mtime(inode);
info->fsflags = (dir == NULL) ? 0 :
SHMEM_I(dir)->fsflags & SHMEM_FL_INHERITED;
if (info->fsflags)
@@ -3229,7 +3229,7 @@ shmem_mknod(struct mnt_idmap *idmap, struct inode *dir,
goto out_iput;
dir->i_size += BOGO_DIRENT_SIZE;
- dir->i_mtime = inode_set_ctime_current(dir);
+ inode_set_mtime_to_ts(dir, inode_set_ctime_current(dir));
inode_inc_iversion(dir);
d_instantiate(dentry, inode);
dget(dentry); /* Extra count - pin the dentry in core */
@@ -3318,8 +3318,8 @@ static int shmem_link(struct dentry *old_dentry, struct inode *dir, struct dentr
}
dir->i_size += BOGO_DIRENT_SIZE;
- dir->i_mtime = inode_set_ctime_to_ts(dir,
- inode_set_ctime_current(inode));
+ inode_set_mtime_to_ts(dir,
+ inode_set_ctime_to_ts(dir, inode_set_ctime_current(inode)));
inode_inc_iversion(dir);
inc_nlink(inode);
ihold(inode); /* New dentry reference */
@@ -3339,8 +3339,8 @@ static int shmem_unlink(struct inode *dir, struct dentry *dentry)
simple_offset_remove(shmem_get_offset_ctx(dir), dentry);
dir->i_size -= BOGO_DIRENT_SIZE;
- dir->i_mtime = inode_set_ctime_to_ts(dir,
- inode_set_ctime_current(inode));
+ inode_set_mtime_to_ts(dir,
+ inode_set_ctime_to_ts(dir, inode_set_ctime_current(inode)));
inode_inc_iversion(dir);
drop_nlink(inode);
dput(dentry); /* Undo the count from "create" - this does all the work */
@@ -3488,7 +3488,7 @@ static int shmem_symlink(struct mnt_idmap *idmap, struct inode *dir,
folio_put(folio);
}
dir->i_size += BOGO_DIRENT_SIZE;
- dir->i_mtime = inode_set_ctime_current(dir);
+ inode_set_mtime_to_ts(dir, inode_set_ctime_current(dir));
inode_inc_iversion(dir);
d_instantiate(dentry, inode);
dget(dentry);
--
2.41.0
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-09-28 11:05 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-28 11:02 [PATCH 00/87] fs: new accessor methods for atime and mtime Jeff Layton
2023-09-28 11:02 ` [PATCH 02/87] fs: convert core infrastructure to new {a,m}time accessors Jeff Layton
2023-09-28 11:02 ` [PATCH 44/87] fs/hugetlbfs: convert to new inode " Jeff Layton
2023-09-28 11:03 ` [PATCH 80/87] mm: " Jeff Layton
2023-09-28 11:03 ` [PATCH 01/87] fs: new accessor methods for atime and mtime Jeff Layton
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox