Re: [PATCH v4 2/9] fs: add infrastructure for multigrain inode i_m/ctime

Jeff Layton
2023-06-13T13:09:42Z

On Tue, 2023-05-23 at 14:46 +0200, Jan Kara wrote:
> On Tue 23-05-23 06:40:08, Jeff Layton wrote:
> > On Tue, 2023-05-23 at 12:02 +0200, Jan Kara wrote:
> > >
> > > So there are two things I dislike about this series because I think they
> > > are fragile:
> > >
> > > 1) If we have a filesystem supporting multigrain ts and someone
> > > accidentally directly uses the value of inode->i_ctime, he can get bogus
> > > value (with QUERIED flag). This mistake is very easy to do. So I think we
> > > should rename i_ctime to something like __i_ctime and always use accessor
> > > function for it.
> > >
> >
> > We could do this, but it'll be quite invasive. We'd have to change any
> > place that touches i_ctime (and there are a lot of them), even on
> > filesystems that are not being converted.
>
> Yes, that's why I suggested Coccinelle to deal with this.

I've done the work to convert all of the accesses of i_ctime into
accessor functions in the kernel. The current state of it is here:

https://git.kernel.org/pub/scm/linux/kernel/git/jlayton/linux.git/commit/?h=ctime

As expected, it touches a lot of code, all over the place. So far I have
most of the conversion in one giant patch, and I need to split it up
(probably per-subsystem).

What's the best way to feed this change into mainline? Should I try to
get subsystem maintainers to pick these up, or are we better off feeding
this in via a separate branch?

For reference, the diffstat for the big conversion patch is below:

arch/powerpc/platforms/cell/spufs/inode.c | 2 +-
arch/s390/hypfs/inode.c | 4 +-
drivers/android/binderfs.c | 8 ++--
drivers/infiniband/hw/qib/qib_fs.c | 4 +-
drivers/misc/ibmasm/ibmasmfs.c | 2 +-
drivers/misc/ibmvmc.c | 2 +-
drivers/usb/core/devio.c | 16 ++++----
drivers/usb/gadget/function/f_fs.c | 6 +--
drivers/usb/gadget/legacy/inode.c | 3 +-
fs/9p/vfs_inode.c | 6 ++-
fs/9p/vfs_inode_dotl.c | 11 +++---
fs/adfs/inode.c | 4 +-
fs/affs/amigaffs.c | 6 +--
fs/affs/inode.c | 17 ++++----
fs/afs/dynroot.c | 2 +-
fs/afs/inode.c | 6 +--
fs/attr.c | 2 +-
fs/autofs/inode.c | 2 +-
fs/autofs/root.c | 6 +--
fs/bad_inode.c | 3 +-
fs/befs/linuxvfs.c | 2 +-
fs/bfs/dir.c | 16 ++++----
fs/bfs/inode.c | 6 +--
fs/binfmt_misc.c | 3 +-
fs/btrfs/delayed-inode.c | 10 +++--
fs/btrfs/file.c | 24 ++++-------
fs/btrfs/inode.c | 66 ++++++++++++------------
-------
fs/btrfs/ioctl.c | 2 +-
fs/btrfs/reflink.c | 7 ++--
fs/btrfs/transaction.c | 3 +-
fs/btrfs/tree-log.c | 4 +-
fs/btrfs/xattr.c | 4 +-
fs/ceph/acl.c | 2 +-
fs/ceph/caps.c | 2 +-
fs/ceph/inode.c | 17 ++++----
fs/ceph/snap.c | 2 +-
fs/ceph/xattr.c | 2 +-
fs/coda/coda_linux.c | 2 +-
fs/coda/dir.c | 2 +-
fs/coda/file.c | 2 +-
fs/coda/inode.c | 2 +-
fs/configfs/inode.c | 6 +--
fs/cramfs/inode.c | 2 +-
fs/debugfs/inode.c | 2 +-
fs/devpts/inode.c | 6 +--
fs/ecryptfs/inode.c | 2 +-
fs/efivarfs/file.c | 2 +-
fs/efivarfs/inode.c | 2 +-
fs/efs/inode.c | 5 ++-
fs/erofs/inode.c | 16 ++++----
fs/exfat/file.c | 4 +-
fs/exfat/inode.c | 6 +--
fs/exfat/namei.c | 29 +++++++-------
fs/exfat/super.c | 4 +-
fs/ext2/acl.c | 2 +-
fs/ext2/dir.c | 6 +--
fs/ext2/ialloc.c | 2 +-
fs/ext2/inode.c | 11 +++---
fs/ext2/ioctl.c | 4 +-
fs/ext2/namei.c | 8 ++--
fs/ext2/super.c | 2 +-
fs/ext2/xattr.c | 2 +-
fs/ext4/acl.c | 2 +-
fs/ext4/ext4.h | 20 ++++++++++
fs/ext4/extents.c | 12 +++---
fs/ext4/ialloc.c | 2 +-
fs/ext4/inline.c | 4 +-
fs/ext4/inode.c | 16 ++++----
fs/ext4/ioctl.c | 9 +++--
fs/ext4/namei.c | 26 ++++++------
fs/ext4/super.c | 2 +-
fs/ext4/xattr.c | 6 +--
fs/f2fs/dir.c | 8 ++--
fs/f2fs/f2fs.h | 5 ++-
fs/f2fs/file.c | 16 ++++----
fs/f2fs/inline.c | 2 +-
fs/f2fs/inode.c | 10 ++---
fs/f2fs/namei.c | 12 +++---
fs/f2fs/recovery.c | 4 +-
fs/f2fs/super.c | 2 +-
fs/f2fs/xattr.c | 2 +-
fs/fat/inode.c | 8 ++--
fs/fat/misc.c | 7 +++-
fs/freevxfs/vxfs_inode.c | 4 +-
fs/fuse/control.c | 2 +-
fs/fuse/dir.c | 8 ++--
fs/fuse/inode.c | 18 +++++----
fs/gfs2/acl.c | 2 +-
fs/gfs2/bmap.c | 11 +++---
fs/gfs2/dir.c | 15 +++----
fs/gfs2/file.c | 2 +-
fs/gfs2/glops.c | 4 +-
fs/gfs2/inode.c | 8 ++--
fs/gfs2/super.c | 4 +-
fs/gfs2/xattr.c | 8 ++--
fs/hfs/catalog.c | 8 ++--
fs/hfs/dir.c | 2 +-
fs/hfs/inode.c | 13 +++---
fs/hfs/sysdep.c | 2 +-
fs/hfsplus/catalog.c | 8 ++--
fs/hfsplus/dir.c | 6 +--
fs/hfsplus/inode.c | 14 +++----
fs/hostfs/hostfs_kern.c | 5 ++-
fs/hpfs/dir.c | 8 ++--
fs/hpfs/inode.c | 6 +--
fs/hpfs/namei.c | 26 ++++++------
fs/hpfs/super.c | 5 ++-
fs/hugetlbfs/inode.c | 12 +++---
fs/inode.c | 12 ++++--
fs/isofs/inode.c | 4 +-
fs/isofs/rock.c | 16 ++++----
fs/jffs2/dir.c | 19 ++++-----
fs/jffs2/file.c | 3 +-
fs/jffs2/fs.c | 10 ++---
fs/jffs2/os-linux.h | 2 +-
fs/jfs/acl.c | 2 +-
fs/jfs/inode.c | 2 +-
fs/jfs/ioctl.c | 2 +-
fs/jfs/jfs_imap.c | 8 ++--
fs/jfs/jfs_inode.c | 4 +-
fs/jfs/namei.c | 25 ++++++------
fs/jfs/super.c | 2 +-
fs/jfs/xattr.c | 2 +-
fs/kernfs/inode.c | 4 +-
fs/libfs.c | 32 ++++++++-------
fs/minix/bitmap.c | 2 +-
fs/minix/dir.c | 6 +--
fs/minix/inode.c | 11 +++---
fs/minix/itree_common.c | 4 +-
fs/minix/namei.c | 6 +--
fs/nfs/callback_proc.c | 2 +-
fs/nfs/fscache.h | 4 +-
fs/nfs/inode.c | 21 +++++-----
fs/nfsd/nfsctl.c | 2 +-
fs/nfsd/nfsfh.c | 4 +-
fs/nfsd/vfs.c | 2 +-
fs/nilfs2/dir.c | 6 +--
fs/nilfs2/inode.c | 12 +++---
fs/nilfs2/ioctl.c | 2 +-
fs/nilfs2/namei.c | 8 ++--
fs/nsfs.c | 2 +-
fs/ntfs/inode.c | 15 +++----
fs/ntfs/mft.c | 3 +-
fs/ntfs3/file.c | 6 +--
fs/ntfs3/frecord.c | 4 +-
fs/ntfs3/inode.c | 14 ++++---
fs/ntfs3/namei.c | 10 ++---
fs/ntfs3/xattr.c | 4 +-
fs/ocfs2/acl.c | 6 +--
fs/ocfs2/alloc.c | 6 +--
fs/ocfs2/aops.c | 2 +-
fs/ocfs2/dir.c | 8 ++--
fs/ocfs2/dlmfs/dlmfs.c | 4 +-
fs/ocfs2/dlmglue.c | 10 +++--
fs/ocfs2/file.c | 16 ++++----
fs/ocfs2/inode.c | 14 ++++---
fs/ocfs2/move_extents.c | 6 +--
fs/ocfs2/namei.c | 22 ++++++-----
fs/ocfs2/refcounttree.c | 14 +++----
fs/ocfs2/xattr.c | 6 +--
fs/omfs/dir.c | 4 +-
fs/omfs/inode.c | 10 ++---
fs/openpromfs/inode.c | 4 +-
fs/orangefs/namei.c | 2 +-
fs/orangefs/orangefs-utils.c | 6 +--
fs/overlayfs/file.c | 7 +++-
fs/overlayfs/util.c | 2 +-
fs/pipe.c | 2 +-
fs/posix_acl.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 | 4 +-
fs/qnx4/inode.c | 4 +-
fs/qnx6/inode.c | 4 +-
fs/ramfs/inode.c | 6 +--
fs/reiserfs/inode.c | 14 +++----
fs/reiserfs/ioctl.c | 4 +-
fs/reiserfs/namei.c | 21 +++++-----
fs/reiserfs/stree.c | 4 +-
fs/reiserfs/super.c | 2 +-
fs/reiserfs/xattr.c | 5 ++-
fs/reiserfs/xattr_acl.c | 2 +-
fs/romfs/super.c | 4 +-
fs/smb/client/file.c | 4 +-
fs/smb/client/fscache.h | 5 ++-
fs/smb/client/inode.c | 15 ++++---
fs/smb/client/smb2ops.c | 2 +-
fs/smb/server/smb2pdu.c | 8 ++--
fs/squashfs/inode.c | 2 +-
fs/stack.c | 2 +-
fs/stat.c | 2 +-
fs/sysv/dir.c | 6 +--
fs/sysv/ialloc.c | 2 +-
fs/sysv/inode.c | 6 +--
fs/sysv/itree.c | 4 +-
fs/sysv/namei.c | 6 +--
fs/tracefs/inode.c | 2 +-
fs/ubifs/debug.c | 4 +-
fs/ubifs/dir.c | 39 +++++++++---------
fs/ubifs/file.c | 16 ++++----
fs/ubifs/ioctl.c | 2 +-
fs/ubifs/journal.c | 4 +-
fs/ubifs/super.c | 4 +-
fs/ubifs/xattr.c | 6 +--
fs/udf/ialloc.c | 2 +-
fs/udf/inode.c | 17 ++++----
fs/udf/namei.c | 24 +++++------
fs/ufs/dir.c | 6 +--
fs/ufs/ialloc.c | 2 +-
fs/ufs/inode.c | 23 ++++++-----
fs/ufs/namei.c | 8 ++--
fs/vboxsf/utils.c | 4 +-
fs/xfs/libxfs/xfs_inode_buf.c | 4 +-
fs/xfs/libxfs/xfs_trans_inode.c | 2 +-
fs/xfs/xfs_acl.c | 2 +-
fs/xfs/xfs_bmap_util.c | 6 ++-
fs/xfs/xfs_inode.c | 2 +-
fs/xfs/xfs_inode_item.c | 2 +-
fs/xfs/xfs_iops.c | 4 +-
fs/xfs/xfs_itable.c | 4 +-
fs/zonefs/super.c | 8 ++--
include/linux/fs.h | 1 +
include/linux/fs_stack.h | 2 +-
ipc/mqueue.c | 20 +++++-----
kernel/bpf/inode.c | 4 +-
mm/shmem.c | 28 +++++++------
net/sunrpc/rpc_pipe.c | 2 +-
security/apparmor/apparmorfs.c | 6 +--
security/apparmor/policy_unpack.c | 4 +-
security/inode.c | 2 +-
security/selinux/selinuxfs.c | 2 +-
234 files changed, 851 insertions(+), 808 deletions(-)

--
Jeff Layton <jlayton@kernel.org>