Re: [PATCH v2 110/110] vfs: remove kino_t typedef and PRIino format macro

From: Jan Kara

Date: Tue Mar 03 2026 - 06:46:46 EST


On Mon 02-03-26 15:25:34, Jeff Layton wrote:
> Now that i_ino has been widened to u64, replace the kino_t typedef with
> u64 and the PRIino format macro with the concrete format strings.
>
> Replace the remaining PRIino uses throughout the tree, and remove the
> typedef and #define from include/linux/fs.h. Change the i_ino field in
> struct inode from kino_t to u64.
>
> Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>

Looks good. Feel free to add:

Reviewed-by: Jan Kara <jack@xxxxxxx>

Honza

> ---
> fs/dcache.c | 4 ++--
> fs/eventpoll.c | 2 +-
> fs/fserror.c | 2 +-
> fs/inode.c | 10 +++++-----
> fs/locks.c | 6 +++---
> fs/nsfs.c | 4 ++--
> fs/pipe.c | 2 +-
> include/linux/fs.h | 5 +----
> 8 files changed, 16 insertions(+), 19 deletions(-)
>
> diff --git a/fs/dcache.c b/fs/dcache.c
> index 13fb3e89cba7442c9bed74c41ca18be5e43e28c9..9ceab142896f6631017067890fd1079240448e13 100644
> --- a/fs/dcache.c
> +++ b/fs/dcache.c
> @@ -1637,11 +1637,11 @@ static enum d_walk_ret umount_check(void *_data, struct dentry *dentry)
> if (dentry == _data && dentry->d_lockref.count == 1)
> return D_WALK_CONTINUE;
>
> - WARN(1, "BUG: Dentry %p{i=%" PRIino "x,n=%pd} "
> + WARN(1, "BUG: Dentry %p{i=%llx,n=%pd} "
> " still in use (%d) [unmount of %s %s]\n",
> dentry,
> dentry->d_inode ?
> - dentry->d_inode->i_ino : (kino_t)0,
> + dentry->d_inode->i_ino : (u64)0,
> dentry,
> dentry->d_lockref.count,
> dentry->d_sb->s_type->name,
> diff --git a/fs/eventpoll.c b/fs/eventpoll.c
> index 90fd92425492221d13bd0cf067d47579bb407a01..4ccd4d2e31adf571f939d2e777123e40302e565f 100644
> --- a/fs/eventpoll.c
> +++ b/fs/eventpoll.c
> @@ -1080,7 +1080,7 @@ static void ep_show_fdinfo(struct seq_file *m, struct file *f)
> struct inode *inode = file_inode(epi->ffd.file);
>
> seq_printf(m, "tfd: %8d events: %8x data: %16llx "
> - " pos:%lli ino:%" PRIino "x sdev:%x\n",
> + " pos:%lli ino:%llx sdev:%x\n",
> epi->ffd.fd, epi->event.events,
> (long long)epi->event.data,
> (long long)epi->ffd.file->f_pos,
> diff --git a/fs/fserror.c b/fs/fserror.c
> index b685b329b5956a639c41b25c42cfff16e6e5ab6e..1e4d11fd9562fd158a23b64ca60e9b7e01719cb8 100644
> --- a/fs/fserror.c
> +++ b/fs/fserror.c
> @@ -176,7 +176,7 @@ void fserror_report(struct super_block *sb, struct inode *inode,
> lost:
> if (inode)
> pr_err_ratelimited(
> - "%s: lost file I/O error report for ino %" PRIino "u type %u pos 0x%llx len 0x%llx error %d",
> + "%s: lost file I/O error report for ino %llu type %u pos 0x%llx len 0x%llx error %d",
> sb->s_id, inode->i_ino, type, pos, len, error);
> else
> pr_err_ratelimited(
> diff --git a/fs/inode.c b/fs/inode.c
> index 24ab9fa10baf7c885244f23bfccd731efe4a14cc..5ad169d51728c260aeaabb810e59eb3ec1d1ce52 100644
> --- a/fs/inode.c
> +++ b/fs/inode.c
> @@ -726,7 +726,7 @@ void dump_mapping(const struct address_space *mapping)
> struct dentry *dentry_ptr;
> struct dentry dentry;
> char fname[64] = {};
> - kino_t ino;
> + u64 ino;
>
> /*
> * If mapping is an invalid pointer, we don't want to crash
> @@ -750,14 +750,14 @@ void dump_mapping(const struct address_space *mapping)
> }
>
> if (!dentry_first) {
> - pr_warn("aops:%ps ino:%" PRIino "x\n", a_ops, ino);
> + pr_warn("aops:%ps ino:%llx\n", a_ops, ino);
> return;
> }
>
> dentry_ptr = container_of(dentry_first, struct dentry, d_u.d_alias);
> if (get_kernel_nofault(dentry, dentry_ptr) ||
> !dentry.d_parent || !dentry.d_name.name) {
> - pr_warn("aops:%ps ino:%" PRIino "x invalid dentry:%px\n",
> + pr_warn("aops:%ps ino:%llx invalid dentry:%px\n",
> a_ops, ino, dentry_ptr);
> return;
> }
> @@ -768,7 +768,7 @@ void dump_mapping(const struct address_space *mapping)
> * Even if strncpy_from_kernel_nofault() succeeded,
> * the fname could be unreliable
> */
> - pr_warn("aops:%ps ino:%" PRIino "x dentry name(?):\"%s\"\n",
> + pr_warn("aops:%ps ino:%llx dentry name(?):\"%s\"\n",
> a_ops, ino, fname);
> }
>
> @@ -2641,7 +2641,7 @@ void init_special_inode(struct inode *inode, umode_t mode, dev_t rdev)
> /* leave it no_open_fops */
> break;
> default:
> - pr_debug("init_special_inode: bogus i_mode (%o) for inode %s:%" PRIino "u\n",
> + pr_debug("init_special_inode: bogus i_mode (%o) for inode %s:%llu\n",
> mode, inode->i_sb->s_id, inode->i_ino);
> break;
> }
> diff --git a/fs/locks.c b/fs/locks.c
> index 9c5aa23f09b6e061dc94c81cd802bb65dd0053c1..d8b066fb42108971f6b3c7449dbc9b5f8df16b13 100644
> --- a/fs/locks.c
> +++ b/fs/locks.c
> @@ -234,7 +234,7 @@ locks_check_ctx_lists(struct inode *inode)
> if (unlikely(!list_empty(&ctx->flc_flock) ||
> !list_empty(&ctx->flc_posix) ||
> !list_empty(&ctx->flc_lease))) {
> - pr_warn("Leaked locks on dev=0x%x:0x%x ino=0x%" PRIino "x:\n",
> + pr_warn("Leaked locks on dev=0x%x:0x%x ino=0x%llx:\n",
> MAJOR(inode->i_sb->s_dev), MINOR(inode->i_sb->s_dev),
> inode->i_ino);
> locks_dump_ctx_list(&ctx->flc_flock, "FLOCK");
> @@ -251,7 +251,7 @@ locks_check_ctx_file_list(struct file *filp, struct list_head *list, char *list_
>
> list_for_each_entry(flc, list, flc_list)
> if (flc->flc_file == filp)
> - pr_warn("Leaked %s lock on dev=0x%x:0x%x ino=0x%" PRIino "x "
> + pr_warn("Leaked %s lock on dev=0x%x:0x%x ino=0x%llx "
> " fl_owner=%p fl_flags=0x%x fl_type=0x%x fl_pid=%u\n",
> list_type, MAJOR(inode->i_sb->s_dev),
> MINOR(inode->i_sb->s_dev), inode->i_ino,
> @@ -2896,7 +2896,7 @@ static void lock_get_status(struct seq_file *f, struct file_lock_core *flc,
> (type == F_RDLCK) ? "READ" : "UNLCK");
> if (inode) {
> /* userspace relies on this representation of dev_t */
> - seq_printf(f, "%d %02x:%02x:%" PRIino "u ", pid,
> + seq_printf(f, "%d %02x:%02x:%llu ", pid,
> MAJOR(inode->i_sb->s_dev),
> MINOR(inode->i_sb->s_dev), inode->i_ino);
> } else {
> diff --git a/fs/nsfs.c b/fs/nsfs.c
> index 0e099ee2121f8831645c3a25d759793ef2ff9ce6..eac326b85314ac8080248347154d599c953969c7 100644
> --- a/fs/nsfs.c
> +++ b/fs/nsfs.c
> @@ -46,7 +46,7 @@ static char *ns_dname(struct dentry *dentry, char *buffer, int buflen)
> struct ns_common *ns = inode->i_private;
> const struct proc_ns_operations *ns_ops = ns->ops;
>
> - return dynamic_dname(buffer, buflen, "%s:[%" PRIino "u]",
> + return dynamic_dname(buffer, buflen, "%s:[%llu]",
> ns_ops->name, inode->i_ino);
> }
>
> @@ -394,7 +394,7 @@ static int nsfs_show_path(struct seq_file *seq, struct dentry *dentry)
> const struct ns_common *ns = inode->i_private;
> const struct proc_ns_operations *ns_ops = ns->ops;
>
> - seq_printf(seq, "%s:[%" PRIino "u]", ns_ops->name, inode->i_ino);
> + seq_printf(seq, "%s:[%llu]", ns_ops->name, inode->i_ino);
> return 0;
> }
>
> diff --git a/fs/pipe.c b/fs/pipe.c
> index 311928e8713989747605fd79f653e36d27ce8c0e..9841648c9cf3e8e569cf6ba5c792624fe92396f5 100644
> --- a/fs/pipe.c
> +++ b/fs/pipe.c
> @@ -873,7 +873,7 @@ static struct vfsmount *pipe_mnt __ro_after_init;
> */
> static char *pipefs_dname(struct dentry *dentry, char *buffer, int buflen)
> {
> - return dynamic_dname(buffer, buflen, "pipe:[%" PRIino "u]",
> + return dynamic_dname(buffer, buflen, "pipe:[%llu]",
> d_inode(dentry)->i_ino);
> }
>
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index 4193817e02e8bf94f29514ca43379af21f37ac61..097443bf12e289c347651e5f3da5b67eb6b53121 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -758,9 +758,6 @@ struct inode_state_flags {
> enum inode_state_flags_enum __state;
> };
>
> -typedef u64 kino_t;
> -#define PRIino "ll"
> -
> /*
> * Keep mostly read-only and often accessed (especially for
> * the RCU path lookup and 'stat' data) fields at the beginning
> @@ -786,7 +783,7 @@ struct inode {
> #endif
>
> /* Stat data, not accessed from path walking */
> - kino_t i_ino;
> + u64 i_ino;
> /*
> * Filesystems may only read i_nlink directly. They shall use the
> * following functions for modification:
>
> --
> 2.53.0
>
--
Jan Kara <jack@xxxxxxxx>
SUSE Labs, CR