[PATCH 00/61] vfs: change inode->i_ino from unsigned long to u64

Jeff Layton posted 61 patches 1 month, 1 week ago
There is a newer version of this series
drivers/dma-buf/dma-buf.c                  |   2 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c |   4 +-
fs/9p/vfs_addr.c                           |   4 +-
fs/9p/vfs_inode.c                          |   6 +-
fs/9p/vfs_inode_dotl.c                     |   6 +-
fs/affs/amigaffs.c                         |   8 +-
fs/affs/bitmap.c                           |   2 +-
fs/affs/dir.c                              |   2 +-
fs/affs/file.c                             |  20 +-
fs/affs/inode.c                            |  12 +-
fs/affs/namei.c                            |  14 +-
fs/affs/symlink.c                          |   2 +-
fs/afs/dir.c                               |  10 +-
fs/afs/dir_search.c                        |   2 +-
fs/afs/dynroot.c                           |   2 +-
fs/afs/inode.c                             |   2 +-
fs/autofs/inode.c                          |   2 +-
fs/befs/linuxvfs.c                         |  28 +-
fs/bfs/dir.c                               |   4 +-
fs/cachefiles/io.c                         |   6 +-
fs/cachefiles/namei.c                      |  12 +-
fs/cachefiles/xattr.c                      |   2 +-
fs/ceph/crypto.c                           |   4 +-
fs/coda/dir.c                              |   2 +-
fs/coda/inode.c                            |   2 +-
fs/cramfs/inode.c                          |   2 +-
fs/crypto/crypto.c                         |   2 +-
fs/crypto/hooks.c                          |   2 +-
fs/crypto/keysetup.c                       |   2 +-
fs/dcache.c                                |   4 +-
fs/ecryptfs/crypto.c                       |   6 +-
fs/ecryptfs/file.c                         |   2 +-
fs/efs/inode.c                             |   6 +-
fs/eventpoll.c                             |   2 +-
fs/exportfs/expfs.c                        |   4 +-
fs/ext2/dir.c                              |  10 +-
fs/ext2/ialloc.c                           |   9 +-
fs/ext2/inode.c                            |   2 +-
fs/ext2/xattr.c                            |  14 +-
fs/ext4/dir.c                              |   2 +-
fs/ext4/ext4.h                             |   4 +-
fs/ext4/extents.c                          |   8 +-
fs/ext4/extents_status.c                   |  28 +-
fs/ext4/fast_commit.c                      |   8 +-
fs/ext4/ialloc.c                           |  10 +-
fs/ext4/indirect.c                         |   2 +-
fs/ext4/inline.c                           |  14 +-
fs/ext4/inode.c                            |  22 +-
fs/ext4/ioctl.c                            |   4 +-
fs/ext4/mballoc.c                          |   6 +-
fs/ext4/migrate.c                          |   2 +-
fs/ext4/move_extent.c                      |  20 +-
fs/ext4/namei.c                            |  10 +-
fs/ext4/orphan.c                           |  16 +-
fs/ext4/page-io.c                          |  10 +-
fs/ext4/super.c                            |  22 +-
fs/ext4/xattr.c                            |  10 +-
fs/f2fs/compress.c                         |   4 +-
fs/f2fs/dir.c                              |   2 +-
fs/f2fs/extent_cache.c                     |   8 +-
fs/f2fs/f2fs.h                             |   6 +-
fs/f2fs/file.c                             |  12 +-
fs/f2fs/gc.c                               |   2 +-
fs/f2fs/inline.c                           |   4 +-
fs/f2fs/inode.c                            |  48 ++--
fs/f2fs/namei.c                            |   8 +-
fs/f2fs/node.c                             |  12 +-
fs/f2fs/recovery.c                         |  10 +-
fs/f2fs/xattr.c                            |  10 +-
fs/freevxfs/vxfs_bmap.c                    |   4 +-
fs/fserror.c                               |   2 +-
fs/hfs/catalog.c                           |   2 +-
fs/hfs/extent.c                            |   4 +-
fs/hfs/inode.c                             |   4 +-
fs/hfsplus/attributes.c                    |  10 +-
fs/hfsplus/catalog.c                       |   2 +-
fs/hfsplus/dir.c                           |   6 +-
fs/hfsplus/extents.c                       |   6 +-
fs/hfsplus/inode.c                         |   8 +-
fs/hfsplus/super.c                         |   6 +-
fs/hfsplus/xattr.c                         |  10 +-
fs/hpfs/dir.c                              |   4 +-
fs/hpfs/dnode.c                            |   4 +-
fs/hpfs/ea.c                               |   4 +-
fs/hpfs/inode.c                            |   4 +-
fs/inode.c                                 |  46 ++--
fs/iomap/ioend.c                           |   2 +-
fs/isofs/compress.c                        |   2 +-
fs/isofs/dir.c                             |   2 +-
fs/isofs/inode.c                           |   6 +-
fs/isofs/namei.c                           |   2 +-
fs/jbd2/journal.c                          |   4 +-
fs/jbd2/transaction.c                      |   2 +-
fs/jffs2/dir.c                             |   4 +-
fs/jffs2/file.c                            |   4 +-
fs/jffs2/fs.c                              |  18 +-
fs/jfs/inode.c                             |   2 +-
fs/jfs/jfs_imap.c                          |   2 +-
fs/jfs/jfs_metapage.c                      |   2 +-
fs/lockd/svclock.c                         |   8 +-
fs/lockd/svcsubs.c                         |   2 +-
fs/locks.c                                 |   6 +-
fs/minix/inode.c                           |  10 +-
fs/nfs/dir.c                               |  22 +-
fs/nfs/file.c                              |   8 +-
fs/nfs/filelayout/filelayout.c             |   8 +-
fs/nfs/flexfilelayout/flexfilelayout.c     |   8 +-
fs/nfs/inode.c                             |  54 +---
fs/nfs/nfs4proc.c                          |   4 +-
fs/nfs/pnfs.c                              |  12 +-
fs/nfsd/export.c                           |   2 +-
fs/nfsd/nfs4state.c                        |   4 +-
fs/nfsd/nfsfh.c                            |   4 +-
fs/nfsd/vfs.c                              |   2 +-
fs/nilfs2/alloc.c                          |  10 +-
fs/nilfs2/bmap.c                           |   2 +-
fs/nilfs2/btnode.c                         |   2 +-
fs/nilfs2/btree.c                          |  12 +-
fs/nilfs2/dir.c                            |  12 +-
fs/nilfs2/direct.c                         |   4 +-
fs/nilfs2/gcinode.c                        |   2 +-
fs/nilfs2/inode.c                          |   8 +-
fs/nilfs2/mdt.c                            |   2 +-
fs/nilfs2/namei.c                          |   2 +-
fs/nilfs2/segment.c                        |   2 +-
fs/notify/fdinfo.c                         |   4 +-
fs/nsfs.c                                  |   4 +-
fs/ntfs3/super.c                           |   2 +-
fs/ocfs2/alloc.c                           |   2 +-
fs/ocfs2/aops.c                            |   4 +-
fs/ocfs2/dir.c                             |   8 +-
fs/ocfs2/dlmfs/dlmfs.c                     |  10 +-
fs/ocfs2/extent_map.c                      |  12 +-
fs/ocfs2/inode.c                           |   2 +-
fs/ocfs2/quota_local.c                     |   2 +-
fs/ocfs2/refcounttree.c                    |  10 +-
fs/ocfs2/xattr.c                           |   4 +-
fs/orangefs/inode.c                        |   2 +-
fs/overlayfs/export.c                      |   2 +-
fs/overlayfs/namei.c                       |   4 +-
fs/overlayfs/util.c                        |   2 +-
fs/pipe.c                                  |   2 +-
fs/proc/fd.c                               |   2 +-
fs/proc/task_mmu.c                         |   4 +-
fs/qnx4/inode.c                            |   4 +-
fs/qnx6/inode.c                            |   2 +-
fs/smb/client/cifsfs.h                     |  17 --
fs/smb/client/inode.c                      |   6 +-
fs/smb/client/readdir.c                    |   2 +-
fs/ubifs/debug.c                           |   8 +-
fs/ubifs/dir.c                             |  28 +-
fs/ubifs/file.c                            |  28 +-
fs/ubifs/journal.c                         |   6 +-
fs/ubifs/super.c                           |  16 +-
fs/ubifs/tnc.c                             |   4 +-
fs/ubifs/xattr.c                           |  14 +-
fs/udf/directory.c                         |  18 +-
fs/udf/file.c                              |   2 +-
fs/udf/inode.c                             |  12 +-
fs/udf/namei.c                             |   8 +-
fs/udf/super.c                             |   2 +-
fs/ufs/balloc.c                            |   6 +-
fs/ufs/dir.c                               |  10 +-
fs/ufs/ialloc.c                            |   6 +-
fs/ufs/inode.c                             |  18 +-
fs/ufs/ufs_fs.h                            |   6 +-
fs/ufs/util.c                              |   2 +-
fs/verity/init.c                           |   2 +-
fs/zonefs/super.c                          |   8 +-
include/linux/fs.h                         |  28 +-
include/linux/nfs_fs.h                     |  10 -
include/trace/events/cachefiles.h          |  18 +-
include/trace/events/ext4.h                | 427 +++++++++++++++--------------
include/trace/events/f2fs.h                | 172 ++++++------
include/trace/events/filelock.h            |  16 +-
include/trace/events/filemap.h             |  20 +-
include/trace/events/fs_dax.h              |  20 +-
include/trace/events/fsverity.h            |  30 +-
include/trace/events/hugetlbfs.h           |  28 +-
include/trace/events/netfs.h               |   4 +-
include/trace/events/nilfs2.h              |  12 +-
include/trace/events/readahead.h           |  12 +-
include/trace/events/timestamp.h           |  12 +-
include/trace/events/writeback.h           | 148 +++++-----
kernel/events/uprobes.c                    |   4 +-
net/netrom/af_netrom.c                     |   4 +-
net/rose/af_rose.c                         |   4 +-
net/socket.c                               |   2 +-
net/x25/x25_proc.c                         |   4 +-
security/apparmor/apparmorfs.c             |   4 +-
security/integrity/integrity_audit.c       |   2 +-
security/ipe/audit.c                       |   2 +-
security/lsm_audit.c                       |  10 +-
security/selinux/hooks.c                   |   4 +-
security/smack/smack_lsm.c                 |  12 +-
195 files changed, 1101 insertions(+), 1166 deletions(-)
[PATCH 00/61] vfs: change inode->i_ino from unsigned long to u64
Posted by Jeff Layton 1 month, 1 week ago
Christian said [1] to "just do it" when I proposed this, so here we are!

For historical reasons, the inode->i_ino field is an unsigned long,
which means that it's 32 bits on 32 bit architectures. This has caused a
number of filesystems to implement hacks to hash a 64-bit identifier
into a 32-bit field, and deprives us of a universal identifier field for
an inode.

This patchset changes the inode->i_ino field from an unsigned long to a
u64. This shouldn't make any material difference on 64-bit hosts, but
32-bit hosts will see struct inode grow by at least 4 bytes. This could
have effects on slabcache sizes and field alignment.

The bulk of the changes are to format strings and tracepoints, since the
kernel itself doesn't care that much about the i_ino field. The first
patch changes some vfs function arguments, so check that one out
carefully.

With this change, we may be able to shrink some inode structures. For
instance, struct nfs_inode has a fileid field that holds the 64-bit
inode number. With this set of changes, that field could be eliminated.
I'd rather leave that sort of cleanups for later just to keep this
simple.

Much of this set was generated by LLM, but I attributed it to myself
since I consider this to be in the "menial tasks" category of LLM usage.

[1]: https://lore.kernel.org/linux-fsdevel/20260219-portrait-winkt-959070cee42f@brauner/

Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
Jeff Layton (61):
      vfs: widen inode hash/lookup functions to u64
      vfs: change i_ino from unsigned long to u64
      trace: update VFS-layer trace events for u64 i_ino
      ext4: update for u64 i_ino
      jbd2: update format strings for u64 i_ino
      f2fs: update for u64 i_ino
      lockd: update format strings for u64 i_ino
      nfs: update for u64 i_ino
      nfs: remove nfs_fattr_to_ino_t() and nfs_fileid_to_ino_t()
      nfs: remove nfs_compat_user_ino64()
      nfs: remove enable_ino64 module parameter
      nfsd: update format strings for u64 i_ino
      smb: store full 64-bit uniqueid in i_ino
      smb: remove cifs_uniqueid_to_ino_t()
      locks: update /proc/locks format for u64 i_ino
      proc: update /proc/PID/maps for u64 i_ino
      nilfs2: update for u64 i_ino
      9p: update format strings for u64 i_ino
      affs: update format strings for u64 i_ino
      afs: update format strings for u64 i_ino
      autofs: update format strings for u64 i_ino
      befs: update format strings for u64 i_ino
      bfs: update format strings for u64 i_ino
      cachefiles: update format strings for u64 i_ino
      ceph: update format strings for u64 i_ino
      coda: update format strings for u64 i_ino
      cramfs: update format strings for u64 i_ino
      ecryptfs: update format strings for u64 i_ino
      efs: update format strings for u64 i_ino
      exportfs: update format strings for u64 i_ino
      ext2: update format strings for u64 i_ino
      freevxfs: update format strings for u64 i_ino
      hfs: update format strings for u64 i_ino
      hfsplus: update format strings for u64 i_ino
      hpfs: update format strings for u64 i_ino
      isofs: update format strings for u64 i_ino
      jffs2: update format strings for u64 i_ino
      jfs: update format strings for u64 i_ino
      minix: update format strings for u64 i_ino
      nsfs: update format strings for u64 i_ino
      ntfs3: update format strings for u64 i_ino
      ocfs2: update format strings for u64 i_ino
      orangefs: update format strings for u64 i_ino
      overlayfs: update format strings for u64 i_ino
      qnx4: update format strings for u64 i_ino
      qnx6: update format strings for u64 i_ino
      ubifs: update format strings for u64 i_ino
      udf: update format strings for u64 i_ino
      ufs: update format strings for u64 i_ino
      zonefs: update format strings for u64 i_ino
      security: update audit format strings for u64 i_ino
      drm/amdgpu: update for u64 i_ino
      fsnotify: update fdinfo format strings for u64 i_ino
      net: update socket dname format for u64 i_ino
      uprobes: update format strings for u64 i_ino
      dma-buf: update format string for u64 i_ino
      fscrypt: update format strings for u64 i_ino
      fsverity: update format string for u64 i_ino
      iomap: update format string for u64 i_ino
      net: update legacy protocol format strings for u64 i_ino
      vfs: update core format strings for u64 i_ino

 drivers/dma-buf/dma-buf.c                  |   2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_object.c |   4 +-
 fs/9p/vfs_addr.c                           |   4 +-
 fs/9p/vfs_inode.c                          |   6 +-
 fs/9p/vfs_inode_dotl.c                     |   6 +-
 fs/affs/amigaffs.c                         |   8 +-
 fs/affs/bitmap.c                           |   2 +-
 fs/affs/dir.c                              |   2 +-
 fs/affs/file.c                             |  20 +-
 fs/affs/inode.c                            |  12 +-
 fs/affs/namei.c                            |  14 +-
 fs/affs/symlink.c                          |   2 +-
 fs/afs/dir.c                               |  10 +-
 fs/afs/dir_search.c                        |   2 +-
 fs/afs/dynroot.c                           |   2 +-
 fs/afs/inode.c                             |   2 +-
 fs/autofs/inode.c                          |   2 +-
 fs/befs/linuxvfs.c                         |  28 +-
 fs/bfs/dir.c                               |   4 +-
 fs/cachefiles/io.c                         |   6 +-
 fs/cachefiles/namei.c                      |  12 +-
 fs/cachefiles/xattr.c                      |   2 +-
 fs/ceph/crypto.c                           |   4 +-
 fs/coda/dir.c                              |   2 +-
 fs/coda/inode.c                            |   2 +-
 fs/cramfs/inode.c                          |   2 +-
 fs/crypto/crypto.c                         |   2 +-
 fs/crypto/hooks.c                          |   2 +-
 fs/crypto/keysetup.c                       |   2 +-
 fs/dcache.c                                |   4 +-
 fs/ecryptfs/crypto.c                       |   6 +-
 fs/ecryptfs/file.c                         |   2 +-
 fs/efs/inode.c                             |   6 +-
 fs/eventpoll.c                             |   2 +-
 fs/exportfs/expfs.c                        |   4 +-
 fs/ext2/dir.c                              |  10 +-
 fs/ext2/ialloc.c                           |   9 +-
 fs/ext2/inode.c                            |   2 +-
 fs/ext2/xattr.c                            |  14 +-
 fs/ext4/dir.c                              |   2 +-
 fs/ext4/ext4.h                             |   4 +-
 fs/ext4/extents.c                          |   8 +-
 fs/ext4/extents_status.c                   |  28 +-
 fs/ext4/fast_commit.c                      |   8 +-
 fs/ext4/ialloc.c                           |  10 +-
 fs/ext4/indirect.c                         |   2 +-
 fs/ext4/inline.c                           |  14 +-
 fs/ext4/inode.c                            |  22 +-
 fs/ext4/ioctl.c                            |   4 +-
 fs/ext4/mballoc.c                          |   6 +-
 fs/ext4/migrate.c                          |   2 +-
 fs/ext4/move_extent.c                      |  20 +-
 fs/ext4/namei.c                            |  10 +-
 fs/ext4/orphan.c                           |  16 +-
 fs/ext4/page-io.c                          |  10 +-
 fs/ext4/super.c                            |  22 +-
 fs/ext4/xattr.c                            |  10 +-
 fs/f2fs/compress.c                         |   4 +-
 fs/f2fs/dir.c                              |   2 +-
 fs/f2fs/extent_cache.c                     |   8 +-
 fs/f2fs/f2fs.h                             |   6 +-
 fs/f2fs/file.c                             |  12 +-
 fs/f2fs/gc.c                               |   2 +-
 fs/f2fs/inline.c                           |   4 +-
 fs/f2fs/inode.c                            |  48 ++--
 fs/f2fs/namei.c                            |   8 +-
 fs/f2fs/node.c                             |  12 +-
 fs/f2fs/recovery.c                         |  10 +-
 fs/f2fs/xattr.c                            |  10 +-
 fs/freevxfs/vxfs_bmap.c                    |   4 +-
 fs/fserror.c                               |   2 +-
 fs/hfs/catalog.c                           |   2 +-
 fs/hfs/extent.c                            |   4 +-
 fs/hfs/inode.c                             |   4 +-
 fs/hfsplus/attributes.c                    |  10 +-
 fs/hfsplus/catalog.c                       |   2 +-
 fs/hfsplus/dir.c                           |   6 +-
 fs/hfsplus/extents.c                       |   6 +-
 fs/hfsplus/inode.c                         |   8 +-
 fs/hfsplus/super.c                         |   6 +-
 fs/hfsplus/xattr.c                         |  10 +-
 fs/hpfs/dir.c                              |   4 +-
 fs/hpfs/dnode.c                            |   4 +-
 fs/hpfs/ea.c                               |   4 +-
 fs/hpfs/inode.c                            |   4 +-
 fs/inode.c                                 |  46 ++--
 fs/iomap/ioend.c                           |   2 +-
 fs/isofs/compress.c                        |   2 +-
 fs/isofs/dir.c                             |   2 +-
 fs/isofs/inode.c                           |   6 +-
 fs/isofs/namei.c                           |   2 +-
 fs/jbd2/journal.c                          |   4 +-
 fs/jbd2/transaction.c                      |   2 +-
 fs/jffs2/dir.c                             |   4 +-
 fs/jffs2/file.c                            |   4 +-
 fs/jffs2/fs.c                              |  18 +-
 fs/jfs/inode.c                             |   2 +-
 fs/jfs/jfs_imap.c                          |   2 +-
 fs/jfs/jfs_metapage.c                      |   2 +-
 fs/lockd/svclock.c                         |   8 +-
 fs/lockd/svcsubs.c                         |   2 +-
 fs/locks.c                                 |   6 +-
 fs/minix/inode.c                           |  10 +-
 fs/nfs/dir.c                               |  22 +-
 fs/nfs/file.c                              |   8 +-
 fs/nfs/filelayout/filelayout.c             |   8 +-
 fs/nfs/flexfilelayout/flexfilelayout.c     |   8 +-
 fs/nfs/inode.c                             |  54 +---
 fs/nfs/nfs4proc.c                          |   4 +-
 fs/nfs/pnfs.c                              |  12 +-
 fs/nfsd/export.c                           |   2 +-
 fs/nfsd/nfs4state.c                        |   4 +-
 fs/nfsd/nfsfh.c                            |   4 +-
 fs/nfsd/vfs.c                              |   2 +-
 fs/nilfs2/alloc.c                          |  10 +-
 fs/nilfs2/bmap.c                           |   2 +-
 fs/nilfs2/btnode.c                         |   2 +-
 fs/nilfs2/btree.c                          |  12 +-
 fs/nilfs2/dir.c                            |  12 +-
 fs/nilfs2/direct.c                         |   4 +-
 fs/nilfs2/gcinode.c                        |   2 +-
 fs/nilfs2/inode.c                          |   8 +-
 fs/nilfs2/mdt.c                            |   2 +-
 fs/nilfs2/namei.c                          |   2 +-
 fs/nilfs2/segment.c                        |   2 +-
 fs/notify/fdinfo.c                         |   4 +-
 fs/nsfs.c                                  |   4 +-
 fs/ntfs3/super.c                           |   2 +-
 fs/ocfs2/alloc.c                           |   2 +-
 fs/ocfs2/aops.c                            |   4 +-
 fs/ocfs2/dir.c                             |   8 +-
 fs/ocfs2/dlmfs/dlmfs.c                     |  10 +-
 fs/ocfs2/extent_map.c                      |  12 +-
 fs/ocfs2/inode.c                           |   2 +-
 fs/ocfs2/quota_local.c                     |   2 +-
 fs/ocfs2/refcounttree.c                    |  10 +-
 fs/ocfs2/xattr.c                           |   4 +-
 fs/orangefs/inode.c                        |   2 +-
 fs/overlayfs/export.c                      |   2 +-
 fs/overlayfs/namei.c                       |   4 +-
 fs/overlayfs/util.c                        |   2 +-
 fs/pipe.c                                  |   2 +-
 fs/proc/fd.c                               |   2 +-
 fs/proc/task_mmu.c                         |   4 +-
 fs/qnx4/inode.c                            |   4 +-
 fs/qnx6/inode.c                            |   2 +-
 fs/smb/client/cifsfs.h                     |  17 --
 fs/smb/client/inode.c                      |   6 +-
 fs/smb/client/readdir.c                    |   2 +-
 fs/ubifs/debug.c                           |   8 +-
 fs/ubifs/dir.c                             |  28 +-
 fs/ubifs/file.c                            |  28 +-
 fs/ubifs/journal.c                         |   6 +-
 fs/ubifs/super.c                           |  16 +-
 fs/ubifs/tnc.c                             |   4 +-
 fs/ubifs/xattr.c                           |  14 +-
 fs/udf/directory.c                         |  18 +-
 fs/udf/file.c                              |   2 +-
 fs/udf/inode.c                             |  12 +-
 fs/udf/namei.c                             |   8 +-
 fs/udf/super.c                             |   2 +-
 fs/ufs/balloc.c                            |   6 +-
 fs/ufs/dir.c                               |  10 +-
 fs/ufs/ialloc.c                            |   6 +-
 fs/ufs/inode.c                             |  18 +-
 fs/ufs/ufs_fs.h                            |   6 +-
 fs/ufs/util.c                              |   2 +-
 fs/verity/init.c                           |   2 +-
 fs/zonefs/super.c                          |   8 +-
 include/linux/fs.h                         |  28 +-
 include/linux/nfs_fs.h                     |  10 -
 include/trace/events/cachefiles.h          |  18 +-
 include/trace/events/ext4.h                | 427 +++++++++++++++--------------
 include/trace/events/f2fs.h                | 172 ++++++------
 include/trace/events/filelock.h            |  16 +-
 include/trace/events/filemap.h             |  20 +-
 include/trace/events/fs_dax.h              |  20 +-
 include/trace/events/fsverity.h            |  30 +-
 include/trace/events/hugetlbfs.h           |  28 +-
 include/trace/events/netfs.h               |   4 +-
 include/trace/events/nilfs2.h              |  12 +-
 include/trace/events/readahead.h           |  12 +-
 include/trace/events/timestamp.h           |  12 +-
 include/trace/events/writeback.h           | 148 +++++-----
 kernel/events/uprobes.c                    |   4 +-
 net/netrom/af_netrom.c                     |   4 +-
 net/rose/af_rose.c                         |   4 +-
 net/socket.c                               |   2 +-
 net/x25/x25_proc.c                         |   4 +-
 security/apparmor/apparmorfs.c             |   4 +-
 security/integrity/integrity_audit.c       |   2 +-
 security/ipe/audit.c                       |   2 +-
 security/lsm_audit.c                       |  10 +-
 security/selinux/hooks.c                   |   4 +-
 security/smack/smack_lsm.c                 |  12 +-
 195 files changed, 1101 insertions(+), 1166 deletions(-)
---
base-commit: 2bf35e96cf6c6c3a290b69b777d34be15888e364
change-id: 20260224-iino-u64-b44a3a72543c

Best regards,
-- 
Jeff Layton <jlayton@kernel.org>
Re: [PATCH 00/61] vfs: change inode->i_ino from unsigned long to u64
Posted by Christian Brauner 1 month, 1 week ago
On Thu, Feb 26, 2026 at 10:55:02AM -0500, Jeff Layton wrote:
> Christian said [1] to "just do it" when I proposed this, so here we are!
> 
> For historical reasons, the inode->i_ino field is an unsigned long,
> which means that it's 32 bits on 32 bit architectures. This has caused a
> number of filesystems to implement hacks to hash a 64-bit identifier
> into a 32-bit field, and deprives us of a universal identifier field for
> an inode.
> 
> This patchset changes the inode->i_ino field from an unsigned long to a
> u64. This shouldn't make any material difference on 64-bit hosts, but
> 32-bit hosts will see struct inode grow by at least 4 bytes. This could
> have effects on slabcache sizes and field alignment.
> 
> The bulk of the changes are to format strings and tracepoints, since the
> kernel itself doesn't care that much about the i_ino field. The first
> patch changes some vfs function arguments, so check that one out
> carefully.
> 
> With this change, we may be able to shrink some inode structures. For
> instance, struct nfs_inode has a fileid field that holds the 64-bit
> inode number. With this set of changes, that field could be eliminated.
> I'd rather leave that sort of cleanups for later just to keep this
> simple.
> 
> Much of this set was generated by LLM, but I attributed it to myself
> since I consider this to be in the "menial tasks" category of LLM usage.
> 
> [1]: https://lore.kernel.org/linux-fsdevel/20260219-portrait-winkt-959070cee42f@brauner/

I'm working under the assumption that we have crossed the threshold and
people send patches they did completely themselves and also patches that
were done with the help of or almost completely by a tool. You have to
defend it one way or the other.

Frankly, as long as you understand what you're doing in general well and
I know that you are a trusted and thorough developer/maintainer I could
not care less if you tell me whether or not you did this all on your
own or with the help of some tool. In my experience, laziness grows with
experience but so does the amount of ideas. 

So attribute it to yourself or attribute it partially to the tool. I
personally don't care.
Re: [PATCH 00/61] vfs: change inode->i_ino from unsigned long to u64
Posted by Christian König 1 month, 1 week ago
On 2/26/26 16:55, Jeff Layton wrote:
> Christian said [1] to "just do it" when I proposed this, so here we are!
> 
> For historical reasons, the inode->i_ino field is an unsigned long,
> which means that it's 32 bits on 32 bit architectures. This has caused a
> number of filesystems to implement hacks to hash a 64-bit identifier
> into a 32-bit field, and deprives us of a universal identifier field for
> an inode.
> 
> This patchset changes the inode->i_ino field from an unsigned long to a
> u64. This shouldn't make any material difference on 64-bit hosts, but
> 32-bit hosts will see struct inode grow by at least 4 bytes. This could
> have effects on slabcache sizes and field alignment.
> 
> The bulk of the changes are to format strings and tracepoints, since the
> kernel itself doesn't care that much about the i_ino field. The first
> patch changes some vfs function arguments, so check that one out
> carefully.
> 
> With this change, we may be able to shrink some inode structures. For
> instance, struct nfs_inode has a fileid field that holds the 64-bit
> inode number. With this set of changes, that field could be eliminated.
> I'd rather leave that sort of cleanups for later just to keep this
> simple.
> 
> Much of this set was generated by LLM, but I attributed it to myself
> since I consider this to be in the "menial tasks" category of LLM usage.

Sounds reasonable to me, should get_next_ino() also be changed to return an 64bit ino?

Currently it is always only 32bit and we have workarounds for that in DMA-buf for example.

Thanks,
Christian.

> 
> [1]: https://lore.kernel.org/linux-fsdevel/20260219-portrait-winkt-959070cee42f@brauner/
> 
> Signed-off-by: Jeff Layton <jlayton@kernel.org>
> ---
> Jeff Layton (61):
>       vfs: widen inode hash/lookup functions to u64
>       vfs: change i_ino from unsigned long to u64
>       trace: update VFS-layer trace events for u64 i_ino
>       ext4: update for u64 i_ino
>       jbd2: update format strings for u64 i_ino
>       f2fs: update for u64 i_ino
>       lockd: update format strings for u64 i_ino
>       nfs: update for u64 i_ino
>       nfs: remove nfs_fattr_to_ino_t() and nfs_fileid_to_ino_t()
>       nfs: remove nfs_compat_user_ino64()
>       nfs: remove enable_ino64 module parameter
>       nfsd: update format strings for u64 i_ino
>       smb: store full 64-bit uniqueid in i_ino
>       smb: remove cifs_uniqueid_to_ino_t()
>       locks: update /proc/locks format for u64 i_ino
>       proc: update /proc/PID/maps for u64 i_ino
>       nilfs2: update for u64 i_ino
>       9p: update format strings for u64 i_ino
>       affs: update format strings for u64 i_ino
>       afs: update format strings for u64 i_ino
>       autofs: update format strings for u64 i_ino
>       befs: update format strings for u64 i_ino
>       bfs: update format strings for u64 i_ino
>       cachefiles: update format strings for u64 i_ino
>       ceph: update format strings for u64 i_ino
>       coda: update format strings for u64 i_ino
>       cramfs: update format strings for u64 i_ino
>       ecryptfs: update format strings for u64 i_ino
>       efs: update format strings for u64 i_ino
>       exportfs: update format strings for u64 i_ino
>       ext2: update format strings for u64 i_ino
>       freevxfs: update format strings for u64 i_ino
>       hfs: update format strings for u64 i_ino
>       hfsplus: update format strings for u64 i_ino
>       hpfs: update format strings for u64 i_ino
>       isofs: update format strings for u64 i_ino
>       jffs2: update format strings for u64 i_ino
>       jfs: update format strings for u64 i_ino
>       minix: update format strings for u64 i_ino
>       nsfs: update format strings for u64 i_ino
>       ntfs3: update format strings for u64 i_ino
>       ocfs2: update format strings for u64 i_ino
>       orangefs: update format strings for u64 i_ino
>       overlayfs: update format strings for u64 i_ino
>       qnx4: update format strings for u64 i_ino
>       qnx6: update format strings for u64 i_ino
>       ubifs: update format strings for u64 i_ino
>       udf: update format strings for u64 i_ino
>       ufs: update format strings for u64 i_ino
>       zonefs: update format strings for u64 i_ino
>       security: update audit format strings for u64 i_ino
>       drm/amdgpu: update for u64 i_ino
>       fsnotify: update fdinfo format strings for u64 i_ino
>       net: update socket dname format for u64 i_ino
>       uprobes: update format strings for u64 i_ino
>       dma-buf: update format string for u64 i_ino
>       fscrypt: update format strings for u64 i_ino
>       fsverity: update format string for u64 i_ino
>       iomap: update format string for u64 i_ino
>       net: update legacy protocol format strings for u64 i_ino
>       vfs: update core format strings for u64 i_ino
> 
>  drivers/dma-buf/dma-buf.c                  |   2 +-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_object.c |   4 +-
>  fs/9p/vfs_addr.c                           |   4 +-
>  fs/9p/vfs_inode.c                          |   6 +-
>  fs/9p/vfs_inode_dotl.c                     |   6 +-
>  fs/affs/amigaffs.c                         |   8 +-
>  fs/affs/bitmap.c                           |   2 +-
>  fs/affs/dir.c                              |   2 +-
>  fs/affs/file.c                             |  20 +-
>  fs/affs/inode.c                            |  12 +-
>  fs/affs/namei.c                            |  14 +-
>  fs/affs/symlink.c                          |   2 +-
>  fs/afs/dir.c                               |  10 +-
>  fs/afs/dir_search.c                        |   2 +-
>  fs/afs/dynroot.c                           |   2 +-
>  fs/afs/inode.c                             |   2 +-
>  fs/autofs/inode.c                          |   2 +-
>  fs/befs/linuxvfs.c                         |  28 +-
>  fs/bfs/dir.c                               |   4 +-
>  fs/cachefiles/io.c                         |   6 +-
>  fs/cachefiles/namei.c                      |  12 +-
>  fs/cachefiles/xattr.c                      |   2 +-
>  fs/ceph/crypto.c                           |   4 +-
>  fs/coda/dir.c                              |   2 +-
>  fs/coda/inode.c                            |   2 +-
>  fs/cramfs/inode.c                          |   2 +-
>  fs/crypto/crypto.c                         |   2 +-
>  fs/crypto/hooks.c                          |   2 +-
>  fs/crypto/keysetup.c                       |   2 +-
>  fs/dcache.c                                |   4 +-
>  fs/ecryptfs/crypto.c                       |   6 +-
>  fs/ecryptfs/file.c                         |   2 +-
>  fs/efs/inode.c                             |   6 +-
>  fs/eventpoll.c                             |   2 +-
>  fs/exportfs/expfs.c                        |   4 +-
>  fs/ext2/dir.c                              |  10 +-
>  fs/ext2/ialloc.c                           |   9 +-
>  fs/ext2/inode.c                            |   2 +-
>  fs/ext2/xattr.c                            |  14 +-
>  fs/ext4/dir.c                              |   2 +-
>  fs/ext4/ext4.h                             |   4 +-
>  fs/ext4/extents.c                          |   8 +-
>  fs/ext4/extents_status.c                   |  28 +-
>  fs/ext4/fast_commit.c                      |   8 +-
>  fs/ext4/ialloc.c                           |  10 +-
>  fs/ext4/indirect.c                         |   2 +-
>  fs/ext4/inline.c                           |  14 +-
>  fs/ext4/inode.c                            |  22 +-
>  fs/ext4/ioctl.c                            |   4 +-
>  fs/ext4/mballoc.c                          |   6 +-
>  fs/ext4/migrate.c                          |   2 +-
>  fs/ext4/move_extent.c                      |  20 +-
>  fs/ext4/namei.c                            |  10 +-
>  fs/ext4/orphan.c                           |  16 +-
>  fs/ext4/page-io.c                          |  10 +-
>  fs/ext4/super.c                            |  22 +-
>  fs/ext4/xattr.c                            |  10 +-
>  fs/f2fs/compress.c                         |   4 +-
>  fs/f2fs/dir.c                              |   2 +-
>  fs/f2fs/extent_cache.c                     |   8 +-
>  fs/f2fs/f2fs.h                             |   6 +-
>  fs/f2fs/file.c                             |  12 +-
>  fs/f2fs/gc.c                               |   2 +-
>  fs/f2fs/inline.c                           |   4 +-
>  fs/f2fs/inode.c                            |  48 ++--
>  fs/f2fs/namei.c                            |   8 +-
>  fs/f2fs/node.c                             |  12 +-
>  fs/f2fs/recovery.c                         |  10 +-
>  fs/f2fs/xattr.c                            |  10 +-
>  fs/freevxfs/vxfs_bmap.c                    |   4 +-
>  fs/fserror.c                               |   2 +-
>  fs/hfs/catalog.c                           |   2 +-
>  fs/hfs/extent.c                            |   4 +-
>  fs/hfs/inode.c                             |   4 +-
>  fs/hfsplus/attributes.c                    |  10 +-
>  fs/hfsplus/catalog.c                       |   2 +-
>  fs/hfsplus/dir.c                           |   6 +-
>  fs/hfsplus/extents.c                       |   6 +-
>  fs/hfsplus/inode.c                         |   8 +-
>  fs/hfsplus/super.c                         |   6 +-
>  fs/hfsplus/xattr.c                         |  10 +-
>  fs/hpfs/dir.c                              |   4 +-
>  fs/hpfs/dnode.c                            |   4 +-
>  fs/hpfs/ea.c                               |   4 +-
>  fs/hpfs/inode.c                            |   4 +-
>  fs/inode.c                                 |  46 ++--
>  fs/iomap/ioend.c                           |   2 +-
>  fs/isofs/compress.c                        |   2 +-
>  fs/isofs/dir.c                             |   2 +-
>  fs/isofs/inode.c                           |   6 +-
>  fs/isofs/namei.c                           |   2 +-
>  fs/jbd2/journal.c                          |   4 +-
>  fs/jbd2/transaction.c                      |   2 +-
>  fs/jffs2/dir.c                             |   4 +-
>  fs/jffs2/file.c                            |   4 +-
>  fs/jffs2/fs.c                              |  18 +-
>  fs/jfs/inode.c                             |   2 +-
>  fs/jfs/jfs_imap.c                          |   2 +-
>  fs/jfs/jfs_metapage.c                      |   2 +-
>  fs/lockd/svclock.c                         |   8 +-
>  fs/lockd/svcsubs.c                         |   2 +-
>  fs/locks.c                                 |   6 +-
>  fs/minix/inode.c                           |  10 +-
>  fs/nfs/dir.c                               |  22 +-
>  fs/nfs/file.c                              |   8 +-
>  fs/nfs/filelayout/filelayout.c             |   8 +-
>  fs/nfs/flexfilelayout/flexfilelayout.c     |   8 +-
>  fs/nfs/inode.c                             |  54 +---
>  fs/nfs/nfs4proc.c                          |   4 +-
>  fs/nfs/pnfs.c                              |  12 +-
>  fs/nfsd/export.c                           |   2 +-
>  fs/nfsd/nfs4state.c                        |   4 +-
>  fs/nfsd/nfsfh.c                            |   4 +-
>  fs/nfsd/vfs.c                              |   2 +-
>  fs/nilfs2/alloc.c                          |  10 +-
>  fs/nilfs2/bmap.c                           |   2 +-
>  fs/nilfs2/btnode.c                         |   2 +-
>  fs/nilfs2/btree.c                          |  12 +-
>  fs/nilfs2/dir.c                            |  12 +-
>  fs/nilfs2/direct.c                         |   4 +-
>  fs/nilfs2/gcinode.c                        |   2 +-
>  fs/nilfs2/inode.c                          |   8 +-
>  fs/nilfs2/mdt.c                            |   2 +-
>  fs/nilfs2/namei.c                          |   2 +-
>  fs/nilfs2/segment.c                        |   2 +-
>  fs/notify/fdinfo.c                         |   4 +-
>  fs/nsfs.c                                  |   4 +-
>  fs/ntfs3/super.c                           |   2 +-
>  fs/ocfs2/alloc.c                           |   2 +-
>  fs/ocfs2/aops.c                            |   4 +-
>  fs/ocfs2/dir.c                             |   8 +-
>  fs/ocfs2/dlmfs/dlmfs.c                     |  10 +-
>  fs/ocfs2/extent_map.c                      |  12 +-
>  fs/ocfs2/inode.c                           |   2 +-
>  fs/ocfs2/quota_local.c                     |   2 +-
>  fs/ocfs2/refcounttree.c                    |  10 +-
>  fs/ocfs2/xattr.c                           |   4 +-
>  fs/orangefs/inode.c                        |   2 +-
>  fs/overlayfs/export.c                      |   2 +-
>  fs/overlayfs/namei.c                       |   4 +-
>  fs/overlayfs/util.c                        |   2 +-
>  fs/pipe.c                                  |   2 +-
>  fs/proc/fd.c                               |   2 +-
>  fs/proc/task_mmu.c                         |   4 +-
>  fs/qnx4/inode.c                            |   4 +-
>  fs/qnx6/inode.c                            |   2 +-
>  fs/smb/client/cifsfs.h                     |  17 --
>  fs/smb/client/inode.c                      |   6 +-
>  fs/smb/client/readdir.c                    |   2 +-
>  fs/ubifs/debug.c                           |   8 +-
>  fs/ubifs/dir.c                             |  28 +-
>  fs/ubifs/file.c                            |  28 +-
>  fs/ubifs/journal.c                         |   6 +-
>  fs/ubifs/super.c                           |  16 +-
>  fs/ubifs/tnc.c                             |   4 +-
>  fs/ubifs/xattr.c                           |  14 +-
>  fs/udf/directory.c                         |  18 +-
>  fs/udf/file.c                              |   2 +-
>  fs/udf/inode.c                             |  12 +-
>  fs/udf/namei.c                             |   8 +-
>  fs/udf/super.c                             |   2 +-
>  fs/ufs/balloc.c                            |   6 +-
>  fs/ufs/dir.c                               |  10 +-
>  fs/ufs/ialloc.c                            |   6 +-
>  fs/ufs/inode.c                             |  18 +-
>  fs/ufs/ufs_fs.h                            |   6 +-
>  fs/ufs/util.c                              |   2 +-
>  fs/verity/init.c                           |   2 +-
>  fs/zonefs/super.c                          |   8 +-
>  include/linux/fs.h                         |  28 +-
>  include/linux/nfs_fs.h                     |  10 -
>  include/trace/events/cachefiles.h          |  18 +-
>  include/trace/events/ext4.h                | 427 +++++++++++++++--------------
>  include/trace/events/f2fs.h                | 172 ++++++------
>  include/trace/events/filelock.h            |  16 +-
>  include/trace/events/filemap.h             |  20 +-
>  include/trace/events/fs_dax.h              |  20 +-
>  include/trace/events/fsverity.h            |  30 +-
>  include/trace/events/hugetlbfs.h           |  28 +-
>  include/trace/events/netfs.h               |   4 +-
>  include/trace/events/nilfs2.h              |  12 +-
>  include/trace/events/readahead.h           |  12 +-
>  include/trace/events/timestamp.h           |  12 +-
>  include/trace/events/writeback.h           | 148 +++++-----
>  kernel/events/uprobes.c                    |   4 +-
>  net/netrom/af_netrom.c                     |   4 +-
>  net/rose/af_rose.c                         |   4 +-
>  net/socket.c                               |   2 +-
>  net/x25/x25_proc.c                         |   4 +-
>  security/apparmor/apparmorfs.c             |   4 +-
>  security/integrity/integrity_audit.c       |   2 +-
>  security/ipe/audit.c                       |   2 +-
>  security/lsm_audit.c                       |  10 +-
>  security/selinux/hooks.c                   |   4 +-
>  security/smack/smack_lsm.c                 |  12 +-
>  195 files changed, 1101 insertions(+), 1166 deletions(-)
> ---
> base-commit: 2bf35e96cf6c6c3a290b69b777d34be15888e364
> change-id: 20260224-iino-u64-b44a3a72543c
> 
> Best regards,
Re: [PATCH 00/61] vfs: change inode->i_ino from unsigned long to u64
Posted by Jeff Layton 1 month, 1 week ago
On Fri, 2026-02-27 at 10:30 +0100, Christian König wrote:
> On 2/26/26 16:55, Jeff Layton wrote:
> > Christian said [1] to "just do it" when I proposed this, so here we are!
> > 
> > For historical reasons, the inode->i_ino field is an unsigned long,
> > which means that it's 32 bits on 32 bit architectures. This has caused a
> > number of filesystems to implement hacks to hash a 64-bit identifier
> > into a 32-bit field, and deprives us of a universal identifier field for
> > an inode.
> > 
> > This patchset changes the inode->i_ino field from an unsigned long to a
> > u64. This shouldn't make any material difference on 64-bit hosts, but
> > 32-bit hosts will see struct inode grow by at least 4 bytes. This could
> > have effects on slabcache sizes and field alignment.
> > 
> > The bulk of the changes are to format strings and tracepoints, since the
> > kernel itself doesn't care that much about the i_ino field. The first
> > patch changes some vfs function arguments, so check that one out
> > carefully.
> > 
> > With this change, we may be able to shrink some inode structures. For
> > instance, struct nfs_inode has a fileid field that holds the 64-bit
> > inode number. With this set of changes, that field could be eliminated.
> > I'd rather leave that sort of cleanups for later just to keep this
> > simple.
> > 
> > Much of this set was generated by LLM, but I attributed it to myself
> > since I consider this to be in the "menial tasks" category of LLM usage.
> 
> Sounds reasonable to me, should get_next_ino() also be changed to return an 64bit ino?
> 

I'm not opposed to doing that, but I'd probably leave that for a
follow-on cleanup. Just doing the i_ino conversion is already making
for a huge patchset.
-- 
Jeff Layton <jlayton@kernel.org>
Re: [PATCH 00/61] vfs: change inode->i_ino from unsigned long to u64
Posted by Matthew Wilcox 1 month, 1 week ago
On Thu, Feb 26, 2026 at 10:55:02AM -0500, Jeff Layton wrote:
> The bulk of the changes are to format strings and tracepoints, since the
> kernel itself doesn't care that much about the i_ino field. The first
> patch changes some vfs function arguments, so check that one out
> carefully.

Why are the format strings all done as separate patches?  Don't we get
bisection hazards by splitting it apart this way?
Re: [PATCH 00/61] vfs: change inode->i_ino from unsigned long to u64
Posted by Jeff Layton 1 month, 1 week ago
On Thu, 2026-02-26 at 16:49 +0000, Matthew Wilcox wrote:
> On Thu, Feb 26, 2026 at 10:55:02AM -0500, Jeff Layton wrote:
> > The bulk of the changes are to format strings and tracepoints, since the
> > kernel itself doesn't care that much about the i_ino field. The first
> > patch changes some vfs function arguments, so check that one out
> > carefully.
> 
> Why are the format strings all done as separate patches?  Don't we get
> bisection hazards by splitting it apart this way?

Circling back to this...

I have a v2 series (~107 patches) that I'm testing now that does this
more bisectably with the typedef and macro scaffolding that Mathieu
suggested. I'll probably send it early next week.

I had done it this way originally since I figured it was best to break
this up by subsystem. Should I continue with this series as a set of
patches broken up this way, or is it preferable to combine the pile of
format changes into fewer patches?
-- 
Jeff Layton <jlayton@kernel.org>
Re: [PATCH 00/61] vfs: change inode->i_ino from unsigned long to u64
Posted by Mathieu Desnoyers 1 month, 1 week ago
On 2026-02-27 12:19, Jeff Layton wrote:
> On Thu, 2026-02-26 at 16:49 +0000, Matthew Wilcox wrote:
>> On Thu, Feb 26, 2026 at 10:55:02AM -0500, Jeff Layton wrote:
>>> The bulk of the changes are to format strings and tracepoints, since the
>>> kernel itself doesn't care that much about the i_ino field. The first
>>> patch changes some vfs function arguments, so check that one out
>>> carefully.
>>
>> Why are the format strings all done as separate patches?  Don't we get
>> bisection hazards by splitting it apart this way?
> 
> Circling back to this...
> 
> I have a v2 series (~107 patches) that I'm testing now that does this
> more bisectably with the typedef and macro scaffolding that Mathieu
> suggested. I'll probably send it early next week.
> 
> I had done it this way originally since I figured it was best to break
> this up by subsystem. Should I continue with this series as a set of
> patches broken up this way, or is it preferable to combine the pile of
> format changes into fewer patches?

Here is the approach I would recommend to maximize signal over noise
for the follow up email thread discussions:

Now that your series is bisectable, you could post a [RFC PATCH v2]
series with the following:

- Patch 00 introduces the series, points to your git branch implementing
   the whole series,
- The first few patches introduce the new type (kino_t) and macro to
   do the format string transition. Initially kino_t would typedef to
   unsigned long (no changes).
- Followed by patches implementing the type + format string changes for
   a few key subsystems.
- The final patch would change kino_t and the format string macro to
   64-bit integers.

Once everyone agree on those core changes, you could proceed to post
patches that change additional subsystems in a subsequent round.

One more comment: have you tried using Coccinelle to do this kind of
semantic code change ?

Thanks,

Mathieu

-- 
Mathieu Desnoyers
EfficiOS Inc.
https://www.efficios.com
Re: [PATCH 00/61] vfs: change inode->i_ino from unsigned long to u64
Posted by Jeff Layton 1 month, 1 week ago
On Fri, 2026-02-27 at 14:01 -0500, Mathieu Desnoyers wrote:
> On 2026-02-27 12:19, Jeff Layton wrote:
> > On Thu, 2026-02-26 at 16:49 +0000, Matthew Wilcox wrote:
> > > On Thu, Feb 26, 2026 at 10:55:02AM -0500, Jeff Layton wrote:
> > > > The bulk of the changes are to format strings and tracepoints, since the
> > > > kernel itself doesn't care that much about the i_ino field. The first
> > > > patch changes some vfs function arguments, so check that one out
> > > > carefully.
> > > 
> > > Why are the format strings all done as separate patches?  Don't we get
> > > bisection hazards by splitting it apart this way?
> > 
> > Circling back to this...
> > 
> > I have a v2 series (~107 patches) that I'm testing now that does this
> > more bisectably with the typedef and macro scaffolding that Mathieu
> > suggested. I'll probably send it early next week.
> > 
> > I had done it this way originally since I figured it was best to break
> > this up by subsystem. Should I continue with this series as a set of
> > patches broken up this way, or is it preferable to combine the pile of
> > format changes into fewer patches?
> 
> Here is the approach I would recommend to maximize signal over noise
> for the follow up email thread discussions:
> 
> Now that your series is bisectable, you could post a [RFC PATCH v2]
> series with the following:
> 
> - Patch 00 introduces the series, points to your git branch implementing
>    the whole series,
> - The first few patches introduce the new type (kino_t) and macro to
>    do the format string transition. Initially kino_t would typedef to
>    unsigned long (no changes).
> - Followed by patches implementing the type + format string changes for
>    a few key subsystems.
> - The final patch would change kino_t and the format string macro to
>    64-bit integers.
> 

That's pretty much the approach the set I have takes. The current set
is here:

    https://git.kernel.org/pub/scm/linux/kernel/git/jlayton/linux.git/log/?h=iino-u64

My question was more about whether I should batch some of the changes
together. My inclination is that doing it in small, incremental patches
is a good thing, but I figured I'd ask before I spam everyone with a
100+ patch series.

> Once everyone agree on those core changes, you could proceed to post
> patches that change additional subsystems in a subsequent round.
> 
> One more comment: have you tried using Coccinelle to do this kind of
> semantic code change ?

I've use coccinelle before for this sort of change, but my skills with
it are pretty primitive. The problem I saw with using it here is that
the main set of changes involved format strings, and that didn't look
straightforward to do with coccinelle. The LLM seems to have sorted it
out with no trouble though.

On a related note, has anyone has taught an LLM how to use Coccinelle.
I wonder if it might give it a better tool for its toolbox, since
Claude at least seems to mostly use bash, perl or python to make
changes across the tree.
-- 
Jeff Layton <jlayton@kernel.org>
Re: [PATCH 00/61] vfs: change inode->i_ino from unsigned long to u64
Posted by Jeff Layton 1 month, 1 week ago
On Thu, 2026-02-26 at 16:49 +0000, Matthew Wilcox wrote:
> On Thu, Feb 26, 2026 at 10:55:02AM -0500, Jeff Layton wrote:
> > The bulk of the changes are to format strings and tracepoints, since the
> > kernel itself doesn't care that much about the i_ino field. The first
> > patch changes some vfs function arguments, so check that one out
> > carefully.
> 
> Why are the format strings all done as separate patches?  Don't we get
> bisection hazards by splitting it apart this way?

One big patch would be Yuuuuge. We could certainly do it that way, but
it'll be nightmare if we ever do have to revert part of it. What do you
suggest?

-- 
Jeff Layton <jlayton@kernel.org>