Re: [PATCH v3 12/12] treewide: change inode->i_ino from unsigned long to u64
Chuck Lever <[email protected]> Wed, 4 Mar 2026 10:49:09 -0500
| Newsgroups | org.kernel.vger.autofs,dev.linux.lists.fsverity,dev.linux.lists.netfs,dev.linux.lists.ntfs3,dev.linux.lists.nvdimm,dev.linux.lists.ocfs2-devel,dev.linux.lists.v9fs,net.sourceforge.lists.linux-f2fs-devel,org.freedesktop.lists.amd-gfx,org.freedesktop.lists.dri-devel,org.infradead.lists.linux-mtd,org.kernel.vger.audit,org.kernel.vger.bpf,org.kernel.vger.ceph-devel,org.kernel.vger.ecryptfs,org.kernel.vger.linux-bluetooth,org.kernel.vger.linux-can,org.kernel.vger.linux-cifs,org.kernel.vger.linux-ext4,org.kernel.vger.linux-fscrypt,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-hams,org.kernel.vger.linux-integrity,org.kernel.vger.linux-kernel,org.kernel.vger.linux-media,org.kernel.vger.linux-nfs,org.kernel.vger.linux-nilfs,org.kernel.vger.linux-perf-users,org.kernel.vger.linux-sctp,org.kernel.vger.linux-security-module,org.kernel.vger.linux-trace-kernel,org.kernel.vger.linux-unionfs,org.kernel.vger.linux-x25,org.kernel.vger.linux-xfs,org.kernel.vger.netdev,org.kernel.vger.selinux,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
On 3/4/26 10:32 AM, Jeff Layton wrote: > On 32-bit architectures, unsigned long is only 32 bits wide, which > causes 64-bit inode numbers to be silently truncated. Several > filesystems (NFS, XFS, BTRFS, etc.) can generate inode numbers that > exceed 32 bits, and this truncation can lead to inode number collisions > and other subtle bugs on 32-bit systems. > > Change the type of inode->i_ino from unsigned long to u64 to ensure that > inode numbers are always represented as 64-bit values regardless of > architecture. Update all format specifiers treewide from %lu/%lx to > %llu/%llx to match the new type, along with corresponding local variable > types. > > This is the bulk treewide conversion. Earlier patches in this series > handled trace events separately to allow trace field reordering for > better struct packing on 32-bit. > > Signed-off-by: Jeff Layton <[email protected]> > --- > 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 | 10 +++---- > 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/keyring.c | 4 +-- > 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 | 10 +++---- > 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 | 13 ++++---- > 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 | 20 ++++++------- > fs/nfs/file.c | 8 ++--- > fs/nfs/filelayout/filelayout.c | 8 ++--- > fs/nfs/flexfilelayout/flexfilelayout.c | 8 ++--- > fs/nfs/inode.c | 6 ++-- > 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/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 | 2 +- > 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 | 10 +++---- > security/smack/smack_lsm.c | 12 ++++---- > 179 files changed, 607 insertions(+), 607 deletions(-) > diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c > index 8fdbba7cad96443d92cc7fdeea6158c4cc681be1..d2259d948cc33e1c192531d34679123b826cf4dc 100644 > --- a/fs/nfsd/export.c > +++ b/fs/nfsd/export.c > @@ -1039,7 +1039,7 @@ exp_rootfh(struct net *net, struct auth_domain *clp, char *name, > } > inode = d_inode(path.dentry); > > - dprintk("nfsd: exp_rootfh(%s [%p] %s:%s/%ld)\n", > + dprintk("nfsd: exp_rootfh(%s [%p] %s:%s/%llu)\n", > name, path.dentry, clp->name, > inode->i_sb->s_id, inode->i_ino); > exp = exp_parent(cd, clp, &path); > diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c > index 6b9c399b89dfb71a52b9c97f0efe9a1dea0558a6..a569d89ac9123d66bb47e7d74c7c98610de21da2 100644 > --- a/fs/nfsd/nfs4state.c > +++ b/fs/nfsd/nfs4state.c > @@ -1253,7 +1253,7 @@ static void nfsd4_finalize_deleg_timestamps(struct nfs4_delegation *dp, struct f > if (ret) { > struct inode *inode = file_inode(f); > > - pr_notice_ratelimited("nfsd: Unable to update timestamps on inode %02x:%02x:%lu: %d\n", > + pr_notice_ratelimited("nfsd: Unable to update timestamps on inode %02x:%02x:%llu: %d\n", > MAJOR(inode->i_sb->s_dev), > MINOR(inode->i_sb->s_dev), > inode->i_ino, ret); > @@ -2888,7 +2888,7 @@ static void nfs4_show_superblock(struct seq_file *s, struct nfsd_file *f) > { > struct inode *inode = file_inode(f->nf_file); > > - seq_printf(s, "superblock: \"%02x:%02x:%ld\"", > + seq_printf(s, "superblock: \"%02x:%02x:%llu\"", > MAJOR(inode->i_sb->s_dev), > MINOR(inode->i_sb->s_dev), > inode->i_ino); > diff --git a/fs/nfsd/nfsfh.c b/fs/nfsd/nfsfh.c > index ed85dd43da18e6d4c4667ff14dc035f2eacff1d6..ee72c9565e4fe85356674b22b4505d3d531dbe40 100644 > --- a/fs/nfsd/nfsfh.c > +++ b/fs/nfsd/nfsfh.c > @@ -601,9 +601,9 @@ fh_compose(struct svc_fh *fhp, struct svc_export *exp, struct dentry *dentry, > struct inode * inode = d_inode(dentry); > dev_t ex_dev = exp_sb(exp)->s_dev; > > - dprintk("nfsd: fh_compose(exp %02x:%02x/%ld %pd2, ino=%ld)\n", > + dprintk("nfsd: fh_compose(exp %02x:%02x/%llu %pd2, ino=%llu)\n", > MAJOR(ex_dev), MINOR(ex_dev), > - (long) d_inode(exp->ex_path.dentry)->i_ino, > + d_inode(exp->ex_path.dentry)->i_ino, > dentry, > (inode ? inode->i_ino : 0)); > > diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c > index c884c3f34afb044ee5cacc962a04a97de2f7fd88..eafdf7b7890fdee55ddf802d040363f33a7be628 100644 > --- a/fs/nfsd/vfs.c > +++ b/fs/nfsd/vfs.c > @@ -1163,7 +1163,7 @@ nfsd_direct_read(struct svc_rqst *rqstp, struct svc_fh *fhp, > } else if (unlikely(host_err == -EINVAL)) { > struct inode *inode = d_inode(fhp->fh_dentry); > > - pr_info_ratelimited("nfsd: Direct I/O alignment failure on %s/%ld\n", > + pr_info_ratelimited("nfsd: Direct I/O alignment failure on %s/%llu\n", > inode->i_sb->s_id, inode->i_ino); > host_err = -ESERVERFAULT; > } For the NFSD hunks: Reviewed-by: Chuck Lever <[email protected]> -- Chuck Lever