[PATCH 08/61] nfs: update for u64 i_ino

Jeff Layton
2026-02-26T15:57:58Z

Update NFS for u64 i_ino:

- Simplify nfs_fileid_to_ino_t() to return u64 directly, since i_ino
can now store a full 64-bit fileid without folding on 32-bit
- Update nfs_fattr_to_ino_t() to return u64
- Update format strings from %lu/%lx to %llu/%llx
- Remove unnecessary (unsigned long) casts on i_ino

Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
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 | 10 +++++-----
fs/nfs/nfs4proc.c | 4 ++--
fs/nfs/pnfs.c | 12 ++++++------
include/linux/nfs_fs.h | 7 ++-----
8 files changed, 37 insertions(+), 40 deletions(-)

diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
index 2402f57c8e7d932c4656a1439f1deff7954e0dc4..ddc3789363a5f8a2ef0169e37aa2292d075092c4 100644
--- a/fs/nfs/dir.c
+++ b/fs/nfs/dir.c
@@ -1906,7 +1906,7 @@ static int nfs_weak_revalidate(struct dentry *dentry, unsigned int flags)
}

error = nfs_lookup_verify_inode(inode, flags);
- dfprintk(LOOKUPCACHE, "NFS: %s: inode %lu is %s\n",
+ dfprintk(LOOKUPCACHE, "NFS: %s: inode %llu is %s\n",
__func__, inode->i_ino, error ? "invalid" : "valid");
return !error;
}
@@ -2121,7 +2121,7 @@ int nfs_atomic_open(struct inode *dir, struct dentry *dentry,
/* Expect a negative dentry */
BUG_ON(d_inode(dentry));

- dfprintk(VFS, "NFS: atomic_open(%s/%lu), %pd\n",
+ dfprintk(VFS, "NFS: atomic_open(%s/%llu), %pd\n",
dir->i_sb->s_id, dir->i_ino, dentry);

err = nfs_check_flags(open_flags);
@@ -2404,7 +2404,7 @@ static int nfs_do_create(struct inode *dir, struct dentry *dentry,

open_flags |= O_CREAT;

- dfprintk(VFS, "NFS: create(%s/%lu), %pd\n",
+ dfprintk(VFS, "NFS: create(%s/%llu), %pd\n",
dir->i_sb->s_id, dir->i_ino, dentry);

attr.ia_mode = mode;
@@ -2442,7 +2442,7 @@ nfs_mknod(struct mnt_idmap *idmap, struct inode *dir,
struct iattr attr;
int status;

- dfprintk(VFS, "NFS: mknod(%s/%lu), %pd\n",
+ dfprintk(VFS, "NFS: mknod(%s/%llu), %pd\n",
dir->i_sb->s_id, dir->i_ino, dentry);

attr.ia_mode = mode;
@@ -2469,7 +2469,7 @@ struct dentry *nfs_mkdir(struct mnt_idmap *idmap, struct inode *dir,
struct iattr attr;
struct dentry *ret;

- dfprintk(VFS, "NFS: mkdir(%s/%lu), %pd\n",
+ dfprintk(VFS, "NFS: mkdir(%s/%llu), %pd\n",
dir->i_sb->s_id, dir->i_ino, dentry);

attr.ia_valid = ATTR_MODE;
@@ -2507,7 +2507,7 @@ int nfs_rmdir(struct inode *dir, struct dentry *dentry)
{
int error;

- dfprintk(VFS, "NFS: rmdir(%s/%lu), %pd\n",
+ dfprintk(VFS, "NFS: rmdir(%s/%llu), %pd\n",
dir->i_sb->s_id, dir->i_ino, dentry);

trace_nfs_rmdir_enter(dir, dentry);
@@ -2578,7 +2578,7 @@ int nfs_unlink(struct inode *dir, struct dentry *dentry)
{
int error;

- dfprintk(VFS, "NFS: unlink(%s/%lu, %pd)\n", dir->i_sb->s_id,
+ dfprintk(VFS, "NFS: unlink(%s/%llu, %pd)\n", dir->i_sb->s_id,
dir->i_ino, dentry);

trace_nfs_unlink_enter(dir, dentry);
@@ -2638,7 +2638,7 @@ int nfs_symlink(struct mnt_idmap *idmap, struct inode *dir,
unsigned int pathlen = strlen(symname);
int error;

- dfprintk(VFS, "NFS: symlink(%s/%lu, %pd, %s)\n", dir->i_sb->s_id,
+ dfprintk(VFS, "NFS: symlink(%s/%llu, %pd, %s)\n", dir->i_sb->s_id,
dir->i_ino, dentry, symname);

if (pathlen > PAGE_SIZE)
@@ -2660,7 +2660,7 @@ int nfs_symlink(struct mnt_idmap *idmap, struct inode *dir,
error = NFS_PROTO(dir)->symlink(dir, dentry, folio, pathlen, &attr);
trace_nfs_symlink_exit(dir, dentry, error);
if (error != 0) {
- dfprintk(VFS, "NFS: symlink(%s/%lu, %pd, %s) error %d\n",
+ dfprintk(VFS, "NFS: symlink(%s/%llu, %pd, %s) error %d\n",
dir->i_sb->s_id, dir->i_ino,
dentry, symname, error);
d_drop(dentry);
@@ -3414,7 +3414,7 @@ int nfs_permission(struct mnt_idmap *idmap,
if (!res && (mask & MAY_EXEC))
res = nfs_execute_ok(inode, mask);

- dfprintk(VFS, "NFS: permission(%s/%lu), mask=0x%x, res=%d\n",
+ dfprintk(VFS, "NFS: permission(%s/%llu), mask=0x%x, res=%d\n",
inode->i_sb->s_id, inode->i_ino, mask, res);
return res;
out_notsup:
diff --git a/fs/nfs/file.c b/fs/nfs/file.c
index 5d08b6409c284f1ee78f1c2fa327e447eee1ab69..25048a3c236436f334c87e2d58614f8af8929560 100644
--- a/fs/nfs/file.c
+++ b/fs/nfs/file.c
@@ -391,7 +391,7 @@ static int nfs_write_begin(const struct kiocb *iocb,

trace_nfs_write_begin(file_inode(file), pos, len);

- dfprintk(PAGECACHE, "NFS: write_begin(%pD2(%lu), %u@%lld)\n",
+ dfprintk(PAGECACHE, "NFS: write_begin(%pD2(%llu), %u@%lld)\n",
file, mapping->host->i_ino, len, (long long) pos);
nfs_truncate_last_folio(mapping, i_size_read(mapping->host), pos);

@@ -432,7 +432,7 @@ static int nfs_write_end(const struct kiocb *iocb,
int status;

trace_nfs_write_end(file_inode(file), pos, len);
- dfprintk(PAGECACHE, "NFS: write_end(%pD2(%lu), %u@%lld)\n",
+ dfprintk(PAGECACHE, "NFS: write_end(%pD2(%llu), %u@%lld)\n",
file, mapping->host->i_ino, len, (long long) pos);

/*
@@ -557,7 +557,7 @@ static int nfs_launder_folio(struct folio *folio)
struct inode *inode = folio->mapping->host;
int ret;

- dfprintk(PAGECACHE, "NFS: launder_folio(%ld, %llu)\n",
+ dfprintk(PAGECACHE, "NFS: launder_folio(%llu, %llu)\n",
inode->i_ino, folio_pos(folio));

folio_wait_private_2(folio); /* [DEPRECATED] */
@@ -647,7 +647,7 @@ static vm_fault_t nfs_vm_page_mkwrite(struct vm_fault *vmf)
struct address_space *mapping;
struct folio *folio = page_folio(vmf->page);

- dfprintk(PAGECACHE, "NFS: vm_page_mkwrite(%pD2(%lu), offset %lld)\n",
+ dfprintk(PAGECACHE, "NFS: vm_page_mkwrite(%pD2(%llu), offset %lld)\n",
filp, filp->f_mapping->host->i_ino,
(long long)folio_pos(folio));

diff --git a/fs/nfs/filelayout/filelayout.c b/fs/nfs/filelayout/filelayout.c
index 90a11afa5d05423bb289c7f2020ef3b82707a79c..e85380e3b11d7271a9b795e62840074834d77a72 100644
--- a/fs/nfs/filelayout/filelayout.c
+++ b/fs/nfs/filelayout/filelayout.c
@@ -241,7 +241,7 @@ filelayout_set_layoutcommit(struct nfs_pgio_header *hdr)

/* Note: if the write is unstable, don't set end_offs until commit */
pnfs_set_layoutcommit(hdr->inode, hdr->lseg, end_offs);
- dprintk("%s inode %lu pls_end_pos %lu\n", __func__, hdr->inode->i_ino,
+ dprintk("%s inode %llu pls_end_pos %lu\n", __func__, hdr->inode->i_ino,
(unsigned long) NFS_I(hdr->inode)->layout->plh_lwb);
}

@@ -456,7 +456,7 @@ filelayout_read_pagelist(struct nfs_pgio_header *hdr)
u32 j, idx;
struct nfs_fh *fh;

- dprintk("--> %s ino %lu pgbase %u req %zu@%llu\n",
+ dprintk("--> %s ino %llu pgbase %u req %zu@%llu\n",
__func__, hdr->inode->i_ino,
hdr->args.pgbase, (size_t)hdr->args.count, offset);

@@ -514,7 +514,7 @@ filelayout_write_pagelist(struct nfs_pgio_header *hdr, int sync)
if (IS_ERR(ds_clnt))
return PNFS_NOT_ATTEMPTED;

- dprintk("%s ino %lu sync %d req %zu@%llu DS: %s cl_count %d\n",
+ dprintk("%s ino %llu sync %d req %zu@%llu DS: %s cl_count %d\n",
__func__, hdr->inode->i_ino, sync, (size_t) hdr->args.count,
offset, ds->ds_remotestr, refcount_read(&ds->ds_clp->cl_count));

@@ -1001,7 +1001,7 @@ static int filelayout_initiate_commit(struct nfs_commit_data *data, int how)
if (IS_ERR(ds_clnt))
goto out_err;

- dprintk("%s ino %lu, how %d cl_count %d\n", __func__,
+ dprintk("%s ino %llu, how %d cl_count %d\n", __func__,
data->inode->i_ino, how, refcount_read(&ds->ds_clp->cl_count));
data->commit_done_cb = filelayout_commit_done_cb;
refcount_inc(&ds->ds_clp->cl_count);
diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c
index f67773d52830d2ab4d12dd04caccc2077d4105e0..8b1559171fe3977f1b8461db6266c8c0d6c51ba5 100644
--- a/fs/nfs/flexfilelayout/flexfilelayout.c
+++ b/fs/nfs/flexfilelayout/flexfilelayout.c
@@ -1631,7 +1631,7 @@ ff_layout_set_layoutcommit(struct inode *inode,
return;

pnfs_set_layoutcommit(inode, lseg, end_offset);
- dprintk("%s inode %lu pls_end_pos %llu\n", __func__, inode->i_ino,
+ dprintk("%s inode %llu pls_end_pos %llu\n", __func__, inode->i_ino,
(unsigned long long) NFS_I(inode)->layout->plh_lwb);
}

@@ -2136,7 +2136,7 @@ ff_layout_read_pagelist(struct nfs_pgio_header *hdr)
u32 dss_id;
bool ds_fatal_error = false;

- dprintk("--> %s ino %lu pgbase %u req %zu@%llu\n",
+ dprintk("--> %s ino %llu pgbase %u req %zu@%llu\n",
__func__, hdr->inode->i_ino,
hdr->args.pgbase, (size_t)hdr->args.count, offset);

@@ -2245,7 +2245,7 @@ ff_layout_write_pagelist(struct nfs_pgio_header *hdr, int sync)

vers = nfs4_ff_layout_ds_version(mirror, dss_id);

- dprintk("%s ino %lu sync %d req %zu@%llu DS: %s cl_count %d vers %d\n",
+ dprintk("%s ino %llu sync %d req %zu@%llu DS: %s cl_count %d vers %d\n",
__func__, hdr->inode->i_ino, sync, (size_t) hdr->args.count,
offset, ds->ds_remotestr, refcount_read(&ds->ds_clp->cl_count),
vers);
@@ -2336,7 +2336,7 @@ static int ff_layout_initiate_commit(struct nfs_commit_data *data, int how)

vers = nfs4_ff_layout_ds_version(mirror, dss_id);

- dprintk("%s ino %lu, how %d cl_count %d vers %d\n", __func__,
+ dprintk("%s ino %llu, how %d cl_count %d vers %d\n", __func__,
data->inode->i_ino, how, refcount_read(&ds->ds_clp->cl_count),
vers);
data->commit_done_cb = ff_layout_commit_done_cb;
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
index 4786343eeee0f874aa1f31ace2f35fdcb83fc7a6..38c7b79e76b3f9eb21d325b98708fe67d159076f 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
@@ -66,10 +66,10 @@ static int nfs_update_inode(struct inode *, struct nfs_fattr *);

static struct kmem_cache * nfs_inode_cachep;

-static inline unsigned long
+static inline u64
nfs_fattr_to_ino_t(struct nfs_fattr *fattr)
{
- return nfs_fileid_to_ino_t(fattr->fileid);
+ return fattr->fileid;
}

int nfs_wait_bit_killable(struct wait_bit_key *key, int mode)
@@ -2258,7 +2258,7 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
bool attr_changed = false;
bool have_delegation;

- dfprintk(VFS, "NFS: %s(%s/%lu fh_crc=0x%08x ct=%d info=0x%llx)\n",
+ dfprintk(VFS, "NFS: %s(%s/%llu fh_crc=0x%08x ct=%d info=0x%llx)\n",
__func__, inode->i_sb->s_id, inode->i_ino,
nfs_display_fhandle_hash(NFS_FH(inode)),
icount_read(inode), fattr->valid);
@@ -2288,7 +2288,7 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
/*
* Big trouble! The inode has become a different object.
*/
- printk(KERN_DEBUG "NFS: %s: inode %lu mode changed, %07o to %07o\n",
+ printk(KERN_DEBUG "NFS: %s: inode %llu mode changed, %07o to %07o\n",
__func__, inode->i_ino, inode->i_mode, fattr->mode);
goto out_err;
}
@@ -2358,7 +2358,7 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
if (S_ISDIR(inode->i_mode))
nfs_force_lookup_revalidate(inode);
attr_changed = true;
- dprintk("NFS: change_attr change on server for file %s/%ld\n",
+ dprintk("NFS: change_attr change on server for file %s/%lld\n",
inode->i_sb->s_id,
inode->i_ino);
} else if (!have_delegation) {
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 91bcf67bd743f72a008a9dcde29207bf7a36c407..d839a97df822abb9fb0efd25f3402fcca82d4038 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -4714,7 +4714,7 @@ static int _nfs4_proc_lookupp(struct inode *inode,
nfs_fattr_init(fattr);
nfs4_init_sequence(server->nfs_client, &args.seq_args, &res.seq_res, 0, 0);

- dprintk("NFS call lookupp ino=0x%lx\n", inode->i_ino);
+ dprintk("NFS call lookupp ino=0x%llx\n", inode->i_ino);
status = nfs4_do_call_sync(clnt, server, &msg, &args.seq_args,
&res.seq_res, task_flags);
dprintk("NFS reply lookupp: %d\n", status);
@@ -10019,7 +10019,7 @@ nfs4_proc_layoutcommit(struct nfs4_layoutcommit_data *data, bool sync)
int status = 0;

dprintk("NFS: initiating layoutcommit call. sync %d "
- "lbw: %llu inode %lu\n", sync,
+ "lbw: %llu inode %llu\n", sync,
data->args.lastbytewritten,
data->args.inode->i_ino);

diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
index bc13d1e69449ce9bb3ed3ef0bbff06dfab5c60b5..e79deb9bf664df3424d9c26d3390799969d0499e 100644
--- a/fs/nfs/pnfs.c
+++ b/fs/nfs/pnfs.c
@@ -891,7 +891,7 @@ pnfs_layout_free_bulk_destroy_list(struct list_head *layout_list,
while (!list_empty(layout_list)) {
lo = list_entry(layout_list->next, struct pnfs_layout_hdr,
plh_bulk_destroy);
- dprintk("%s freeing layout for inode %lu\n", __func__,
+ dprintk("%s freeing layout for inode %llu\n", __func__,
lo->plh_inode->i_ino);
inode = lo->plh_inode;

@@ -1440,7 +1440,7 @@ _pnfs_return_layout(struct inode *ino)
int status = 0;
bool send, valid_layout;

- dprintk("NFS: %s for inode %lu\n", __func__, ino->i_ino);
+ dprintk("NFS: %s for inode %llu\n", __func__, ino->i_ino);

spin_lock(&ino->i_lock);
lo = nfsi->layout;
@@ -3055,7 +3055,7 @@ pnfs_try_to_write_data(struct nfs_pgio_header *hdr,

hdr->mds_ops = call_ops;

- dprintk("%s: Writing ino:%lu %u@%llu (how %d)\n", __func__,
+ dprintk("%s: Writing ino:%llu %u@%llu (how %d)\n", __func__,
inode->i_ino, hdr->args.count, hdr->args.offset, how);
trypnfs = nfss->pnfs_curr_ld->write_pagelist(hdr, how);
if (trypnfs != PNFS_NOT_ATTEMPTED)
@@ -3181,7 +3181,7 @@ pnfs_try_to_read_data(struct nfs_pgio_header *hdr,

hdr->mds_ops = call_ops;

- dprintk("%s: Reading ino:%lu %u@%llu\n",
+ dprintk("%s: Reading ino:%llu %u@%llu\n",
__func__, inode->i_ino, hdr->args.count, hdr->args.offset);

trypnfs = nfss->pnfs_curr_ld->read_pagelist(hdr);
@@ -3314,7 +3314,7 @@ pnfs_set_layoutcommit(struct inode *inode, struct pnfs_layout_segment *lseg,
if (!test_and_set_bit(NFS_INO_LAYOUTCOMMIT, &nfsi->flags)) {
nfsi->layout->plh_lwb = end_pos;
mark_as_dirty = true;
- dprintk("%s: Set layoutcommit for inode %lu ",
+ dprintk("%s: Set layoutcommit for inode %llu ",
__func__, inode->i_ino);
} else if (end_pos > nfsi->layout->plh_lwb)
nfsi->layout->plh_lwb = end_pos;
@@ -3363,7 +3363,7 @@ pnfs_layoutcommit_inode(struct inode *inode, bool sync)
if (!pnfs_layoutcommit_outstanding(inode))
return 0;

- dprintk("--> %s inode %lu\n", __func__, inode->i_ino);
+ dprintk("--> %s inode %llu\n", __func__, inode->i_ino);

status = -EAGAIN;
if (test_and_set_bit(NFS_INO_LAYOUTCOMMITTING, &nfsi->flags)) {
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h
index 8dd79a3f3d662bfe8ef8f72bb88ad1e2cd40527e..0e6d03c10c3de91cac4cd4d08c961e171cbf9a41 100644
--- a/include/linux/nfs_fs.h
+++ b/include/linux/nfs_fs.h
@@ -667,13 +667,10 @@ static inline loff_t nfs_size_to_loff_t(__u64 size)
return min_t(u64, size, OFFSET_MAX);
}

-static inline ino_t
+static inline u64
nfs_fileid_to_ino_t(u64 fileid)
{
- ino_t ino = (ino_t) fileid;
- if (sizeof(ino_t) < sizeof(u64))
- ino ^= fileid >> (sizeof(u64)-sizeof(ino_t)) * 8;
- return ino;
+ return fileid;
}

static inline void nfs_ooo_clear(struct nfs_inode *nfsi)

--
2.53.0