On Thu, 26 Feb 2026 10:55:05 -0500 Jeff Layton <[email protected]> wrote:
> Update trace event definitions in VFS-layer trace headers to use u64 > instead of ino_t/unsigned long for inode number fields, and change > format strings from %lu/%lx to %llu/%llx to match. > > This is needed because i_ino is now u64. Changing trace event field > types changes the binary trace format, but the self-describing format > metadata handles this transparently for modern trace-cmd and perf. > > Files updated: > - cachefiles.h, filelock.h, filemap.h, fs_dax.h, fsverity.h, > hugetlbfs.h, netfs.h, readahead.h, timestamp.h, writeback.h > Hmm, on 32 bit systems, this will likely cause "holes" in a lot of these events. > Signed-off-by: Jeff Layton <[email protected]> > --- > include/trace/events/cachefiles.h | 18 ++--- > 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/readahead.h | 12 ++-- > include/trace/events/timestamp.h | 12 ++-- > include/trace/events/writeback.h | 148 > +++++++++++++++++++------------------- > 10 files changed, 154 insertions(+), 154 deletions(-) > > diff --git a/include/trace/events/cachefiles.h > b/include/trace/events/cachefiles.h > index > a743b2a35ea7001447b3e05d41539cb88013bc7f..f967027711ee823f224abc1b8ab03f63da06ae6f > 100644 > --- a/include/trace/events/cachefiles.h > +++ b/include/trace/events/cachefiles.h > @@ -251,8 +251,8 @@ TRACE_EVENT(cachefiles_lookup, > TP_STRUCT__entry( > __field(unsigned int, obj) > __field(short, error) There was already a 2 byte hole here, but that's not a big deal. > - __field(unsigned long, dino) > - __field(unsigned long, ino) > + __field(u64, dino) > + __field(u64, ino) > ), > > TP_fast_assign( > @@ -263,7 +263,7 @@ TRACE_EVENT(cachefiles_lookup, > __entry->error = IS_ERR(de) ? PTR_ERR(de) : 0; > ), > > - TP_printk("o=%08x dB=%lx B=%lx e=%d", > + TP_printk("o=%08x dB=%llx B=%llx e=%d", > __entry->obj, __entry->dino, __entry->ino, __entry->error) > ); > > @@ -579,7 +579,7 @@ TRACE_EVENT(cachefiles_mark_active, > /* Note that obj may be NULL */ > TP_STRUCT__entry( > __field(unsigned int, obj) > - __field(ino_t, inode) > + __field(u64, inode) Might be better to reorder any of these that have int first. u64 inode; int obj; Will be packed tighter than: int obj u64 inode; Probably should have changed that before anyway. > ), > > TP_fast_assign( > @@ -587,7 +587,7 @@ TRACE_EVENT(cachefiles_mark_active, > __entry->inode = inode->i_ino; > ), > > - TP_printk("o=%08x B=%lx", > + TP_printk("o=%08x B=%llx", > __entry->obj, __entry->inode) > ); > > @@ -600,7 +600,7 @@ TRACE_EVENT(cachefiles_mark_failed, > /* Note that obj may be NULL */ > TP_STRUCT__entry( > __field(unsigned int, obj) > - __field(ino_t, inode) > + __field(u64, inode) Is ino_t being changed? Why the update here? > ), > > TP_fast_assign( > @@ -608,7 +608,7 @@ TRACE_EVENT(cachefiles_mark_failed, > __entry->inode = inode->i_ino; > ), > > - TP_printk("o=%08x B=%lx", > + TP_printk("o=%08x B=%llx", > __entry->obj, __entry->inode) > ); > > @@ -621,7 +621,7 @@ TRACE_EVENT(cachefiles_mark_inactive, > /* Note that obj may be NULL */ > TP_STRUCT__entry( > __field(unsigned int, obj) > - __field(ino_t, inode) > + __field(u64, inode) Ditto. > ), > > TP_fast_assign( > @@ -629,7 +629,7 @@ TRACE_EVENT(cachefiles_mark_inactive, > __entry->inode = inode->i_ino; > ), > > - TP_printk("o=%08x B=%lx", > + TP_printk("o=%08x B=%llx", > __entry->obj, __entry->inode) > ); > > diff --git a/include/trace/events/filelock.h b/include/trace/events/filelock.h > index > 370016c38a5bbc07d5ba6c102030b49c9eb6424d..41bc752616b25d6cd7955203e2c604029d0b440c > 100644 > --- a/include/trace/events/filelock.h > +++ b/include/trace/events/filelock.h > @@ -42,7 +42,7 @@ TRACE_EVENT(locks_get_lock_context, > TP_ARGS(inode, type, ctx), > > TP_STRUCT__entry( > - __field(unsigned long, i_ino) > + __field(u64, i_ino) > __field(dev_t, s_dev) > __field(unsigned char, type) > __field(struct file_lock_context *, ctx) > @@ -55,7 +55,7 @@ TRACE_EVENT(locks_get_lock_context, > __entry->ctx = ctx; > ), > > - TP_printk("dev=0x%x:0x%x ino=0x%lx type=%s ctx=%p", > + TP_printk("dev=0x%x:0x%x ino=0x%llx type=%s ctx=%p", > MAJOR(__entry->s_dev), MINOR(__entry->s_dev), > __entry->i_ino, show_fl_type(__entry->type), __entry->ctx) > ); > @@ -67,7 +67,7 @@ DECLARE_EVENT_CLASS(filelock_lock, > > TP_STRUCT__entry( > __field(struct file_lock *, fl) > - __field(unsigned long, i_ino) > + __field(u64, i_ino) Having u64 before a pointer would be tighter on 32 bit systems, and leaves out any holes in the trace. > __field(dev_t, s_dev) > __field(struct file_lock_core *, blocker) > __field(fl_owner_t, owner) > @@ -93,7 +93,7 @@ DECLARE_EVENT_CLASS(filelock_lock, > __entry->ret = ret; > ), > > - TP_printk("fl=%p dev=0x%x:0x%x ino=0x%lx fl_blocker=%p fl_owner=%p > fl_pid=%u fl_flags=%s fl_type=%s fl_start=%lld fl_end=%lld ret=%d", > + TP_printk("fl=%p dev=0x%x:0x%x ino=0x%llx fl_blocker=%p fl_owner=%p > fl_pid=%u fl_flags=%s fl_type=%s fl_start=%lld fl_end=%lld ret=%d", > __entry->fl, MAJOR(__entry->s_dev), MINOR(__entry->s_dev), > __entry->i_ino, __entry->blocker, __entry->owner, > __entry->pid, show_fl_flags(__entry->flags), > @@ -124,7 +124,7 @@ DECLARE_EVENT_CLASS(filelock_lease, > > TP_STRUCT__entry( > __field(struct file_lease *, fl) > - __field(unsigned long, i_ino) > + __field(u64, i_ino) Same here. > __field(dev_t, s_dev) > __field(struct file_lock_core *, blocker) > __field(fl_owner_t, owner) > @@ -146,7 +146,7 @@ DECLARE_EVENT_CLASS(filelock_lease, > __entry->downgrade_time = fl ? fl->fl_downgrade_time : 0; > ), > > - TP_printk("fl=%p dev=0x%x:0x%x ino=0x%lx fl_blocker=%p fl_owner=%p > fl_flags=%s fl_type=%s fl_break_time=%lu fl_downgrade_time=%lu", > + TP_printk("fl=%p dev=0x%x:0x%x ino=0x%llx fl_blocker=%p fl_owner=%p > fl_flags=%s fl_type=%s fl_break_time=%lu fl_downgrade_time=%lu", > __entry->fl, MAJOR(__entry->s_dev), MINOR(__entry->s_dev), > __entry->i_ino, __entry->blocker, __entry->owner, > show_fl_flags(__entry->flags), > @@ -175,7 +175,7 @@ TRACE_EVENT(generic_add_lease, > TP_ARGS(inode, fl), > > TP_STRUCT__entry( > - __field(unsigned long, i_ino) > + __field(u64, i_ino) > __field(int, wcount) > __field(int, rcount) > __field(int, icount) > @@ -196,7 +196,7 @@ TRACE_EVENT(generic_add_lease, > __entry->type = fl->c.flc_type; > ), > > - TP_printk("dev=0x%x:0x%x ino=0x%lx wcount=%d rcount=%d icount=%d > fl_owner=%p fl_flags=%s fl_type=%s", > + TP_printk("dev=0x%x:0x%x ino=0x%llx wcount=%d rcount=%d icount=%d > fl_owner=%p fl_flags=%s fl_type=%s", > MAJOR(__entry->s_dev), MINOR(__entry->s_dev), > __entry->i_ino, __entry->wcount, __entry->rcount, > __entry->icount, __entry->owner, > diff --git a/include/trace/events/filemap.h b/include/trace/events/filemap.h > index > f48fe637bfd25885dc6daaf09336ab60626b4944..153491e57cce6df73e30ddee60a52ed7d8923c24 > 100644 > --- a/include/trace/events/filemap.h > +++ b/include/trace/events/filemap.h > @@ -21,7 +21,7 @@ DECLARE_EVENT_CLASS(mm_filemap_op_page_cache, > > TP_STRUCT__entry( > __field(unsigned long, pfn) > - __field(unsigned long, i_ino) > + __field(u64, i_ino) Again, this would cause a 32 bit hole. > __field(unsigned long, index) > __field(dev_t, s_dev) > __field(unsigned char, order) > @@ -38,7 +38,7 @@ DECLARE_EVENT_CLASS(mm_filemap_op_page_cache, > __entry->order = folio_order(folio); > ), > > - TP_printk("dev %d:%d ino %lx pfn=0x%lx ofs=%lu order=%u", > + TP_printk("dev %d:%d ino %llx pfn=0x%lx ofs=%lu order=%u", > MAJOR(__entry->s_dev), MINOR(__entry->s_dev), > __entry->i_ino, > __entry->pfn, > @@ -67,7 +67,7 @@ DECLARE_EVENT_CLASS(mm_filemap_op_page_cache_range, > TP_ARGS(mapping, index, last_index), > > TP_STRUCT__entry( > - __field(unsigned long, i_ino) > + __field(u64, i_ino) > __field(dev_t, s_dev) > __field(unsigned long, index) > __field(unsigned long, last_index) > @@ -85,7 +85,7 @@ DECLARE_EVENT_CLASS(mm_filemap_op_page_cache_range, > ), > > TP_printk( > - "dev=%d:%d ino=%lx ofs=%lld-%lld", > + "dev=%d:%d ino=%llx ofs=%lld-%lld", > MAJOR(__entry->s_dev), > MINOR(__entry->s_dev), __entry->i_ino, > ((loff_t)__entry->index) << PAGE_SHIFT, > @@ -117,7 +117,7 @@ TRACE_EVENT(mm_filemap_fault, > TP_ARGS(mapping, index), > > TP_STRUCT__entry( > - __field(unsigned long, i_ino) > + __field(u64, i_ino) > __field(dev_t, s_dev) > __field(unsigned long, index) > ), > @@ -133,7 +133,7 @@ TRACE_EVENT(mm_filemap_fault, > ), > > TP_printk( > - "dev=%d:%d ino=%lx ofs=%lld", > + "dev=%d:%d ino=%llx ofs=%lld", > MAJOR(__entry->s_dev), > MINOR(__entry->s_dev), __entry->i_ino, > ((loff_t)__entry->index) << PAGE_SHIFT > @@ -146,7 +146,7 @@ TRACE_EVENT(filemap_set_wb_err, > TP_ARGS(mapping, eseq), > > TP_STRUCT__entry( > - __field(unsigned long, i_ino) > + __field(u64, i_ino) > __field(dev_t, s_dev) > __field(errseq_t, errseq) > ), > @@ -160,7 +160,7 @@ TRACE_EVENT(filemap_set_wb_err, > __entry->s_dev = mapping->host->i_rdev; > ), > > - TP_printk("dev=%d:%d ino=0x%lx errseq=0x%x", > + TP_printk("dev=%d:%d ino=0x%llx errseq=0x%x", > MAJOR(__entry->s_dev), MINOR(__entry->s_dev), > __entry->i_ino, __entry->errseq) > ); > @@ -172,7 +172,7 @@ TRACE_EVENT(file_check_and_advance_wb_err, > > TP_STRUCT__entry( > __field(struct file *, file) > - __field(unsigned long, i_ino) > + __field(u64, i_ino) Having a pointer after the u64 is better. > __field(dev_t, s_dev) > __field(errseq_t, old) > __field(errseq_t, new) > @@ -191,7 +191,7 @@ TRACE_EVENT(file_check_and_advance_wb_err, > __entry->new = file->f_wb_err; > ), > > - TP_printk("file=%p dev=%d:%d ino=0x%lx old=0x%x new=0x%x", > + TP_printk("file=%p dev=%d:%d ino=0x%llx old=0x%x new=0x%x", > __entry->file, MAJOR(__entry->s_dev), > MINOR(__entry->s_dev), __entry->i_ino, __entry->old, > __entry->new) > diff --git a/include/trace/events/fs_dax.h b/include/trace/events/fs_dax.h > index > 50ebc1290ab062a9c30ab00049fb96691f9a0f23..11121baa8ece7928c653b4f874fb10ffbdd02fd0 > 100644 > --- a/include/trace/events/fs_dax.h > +++ b/include/trace/events/fs_dax.h > @@ -12,7 +12,7 @@ DECLARE_EVENT_CLASS(dax_pmd_fault_class, > pgoff_t max_pgoff, int result), > TP_ARGS(inode, vmf, max_pgoff, result), > TP_STRUCT__entry( > - __field(unsigned long, ino) > + __field(u64, ino) > __field(unsigned long, vm_start) > __field(unsigned long, vm_end) > __field(vm_flags_t, vm_flags) > @@ -35,7 +35,7 @@ DECLARE_EVENT_CLASS(dax_pmd_fault_class, > __entry->max_pgoff = max_pgoff; > __entry->result = result; > ), > - TP_printk("dev %d:%d ino %#lx %s %s address %#lx vm_start " > + TP_printk("dev %d:%d ino %#llx %s %s address %#lx vm_start " > "%#lx vm_end %#lx pgoff %#lx max_pgoff %#lx %s", > MAJOR(__entry->dev), > MINOR(__entry->dev), > @@ -66,7 +66,7 @@ DECLARE_EVENT_CLASS(dax_pmd_load_hole_class, > void *radix_entry), > TP_ARGS(inode, vmf, zero_folio, radix_entry), > TP_STRUCT__entry( > - __field(unsigned long, ino) > + __field(u64, ino) > __field(vm_flags_t, vm_flags) > __field(unsigned long, address) > __field(struct folio *, zero_folio) > @@ -81,7 +81,7 @@ DECLARE_EVENT_CLASS(dax_pmd_load_hole_class, > __entry->zero_folio = zero_folio; > __entry->radix_entry = radix_entry; > ), > - TP_printk("dev %d:%d ino %#lx %s address %#lx zero_folio %p " > + TP_printk("dev %d:%d ino %#llx %s address %#lx zero_folio %p " > "radix_entry %#lx", > MAJOR(__entry->dev), > MINOR(__entry->dev), > @@ -106,7 +106,7 @@ DECLARE_EVENT_CLASS(dax_pte_fault_class, > TP_PROTO(struct inode *inode, struct vm_fault *vmf, int result), > TP_ARGS(inode, vmf, result), > TP_STRUCT__entry( > - __field(unsigned long, ino) > + __field(u64, ino) > __field(vm_flags_t, vm_flags) > __field(unsigned long, address) > __field(pgoff_t, pgoff) > @@ -123,7 +123,7 @@ DECLARE_EVENT_CLASS(dax_pte_fault_class, > __entry->pgoff = vmf->pgoff; > __entry->result = result; > ), > - TP_printk("dev %d:%d ino %#lx %s %s address %#lx pgoff %#lx %s", > + TP_printk("dev %d:%d ino %#llx %s %s address %#lx pgoff %#lx %s", > MAJOR(__entry->dev), > MINOR(__entry->dev), > __entry->ino, > @@ -150,7 +150,7 @@ DECLARE_EVENT_CLASS(dax_writeback_range_class, > TP_PROTO(struct inode *inode, pgoff_t start_index, pgoff_t end_index), > TP_ARGS(inode, start_index, end_index), > TP_STRUCT__entry( > - __field(unsigned long, ino) > + __field(u64, ino) > __field(pgoff_t, start_index) > __field(pgoff_t, end_index) > __field(dev_t, dev) > @@ -161,7 +161,7 @@ DECLARE_EVENT_CLASS(dax_writeback_range_class, > __entry->start_index = start_index; > __entry->end_index = end_index; > ), > - TP_printk("dev %d:%d ino %#lx pgoff %#lx-%#lx", > + TP_printk("dev %d:%d ino %#llx pgoff %#lx-%#lx", > MAJOR(__entry->dev), > MINOR(__entry->dev), > __entry->ino, > @@ -182,7 +182,7 @@ TRACE_EVENT(dax_writeback_one, > TP_PROTO(struct inode *inode, pgoff_t pgoff, pgoff_t pglen), > TP_ARGS(inode, pgoff, pglen), > TP_STRUCT__entry( > - __field(unsigned long, ino) > + __field(u64, ino) > __field(pgoff_t, pgoff) > __field(pgoff_t, pglen) > __field(dev_t, dev) > @@ -193,7 +193,7 @@ TRACE_EVENT(dax_writeback_one, > __entry->pgoff = pgoff; > __entry->pglen = pglen; > ), > - TP_printk("dev %d:%d ino %#lx pgoff %#lx pglen %#lx", > + TP_printk("dev %d:%d ino %#llx pgoff %#lx pglen %#lx", > MAJOR(__entry->dev), > MINOR(__entry->dev), > __entry->ino, > diff --git a/include/trace/events/fsverity.h b/include/trace/events/fsverity.h > index > a8c52f21cbd5eb010c7e7b2fdb8f9de49c8ea326..4477c17e05748360965c4e1840590efe96d6335e > 100644 > --- a/include/trace/events/fsverity.h > +++ b/include/trace/events/fsverity.h > @@ -16,7 +16,7 @@ TRACE_EVENT(fsverity_enable, > const struct merkle_tree_params *params), > TP_ARGS(inode, params), > TP_STRUCT__entry( > - __field(ino_t, ino) > + __field(u64, ino) Do you need to convert all these ino_t's? > __field(u64, data_size) > __field(u64, tree_size) > __field(unsigned int, merkle_block) > @@ -29,8 +29,8 @@ TRACE_EVENT(fsverity_enable, > __entry->merkle_block = params->block_size; > __entry->num_levels = params->num_levels; > ), > - TP_printk("ino %lu data_size %llu tree_size %llu merkle_block %u levels > %u", > - (unsigned long) __entry->ino, > + TP_printk("ino %llu data_size %llu tree_size %llu merkle_block %u > levels %u", > + __entry->ino, > __entry->data_size, > __entry->tree_size, > __entry->merkle_block, > @@ -42,7 +42,7 @@ TRACE_EVENT(fsverity_tree_done, > const struct merkle_tree_params *params), > TP_ARGS(inode, vi, params), > TP_STRUCT__entry( > - __field(ino_t, ino) > + __field(u64, ino) > __field(u64, data_size) > __field(u64, tree_size) > __field(unsigned int, merkle_block) > @@ -59,8 +59,8 @@ TRACE_EVENT(fsverity_tree_done, > memcpy(__get_dynamic_array(root_hash), vi->root_hash, > __get_dynamic_array_len(root_hash)); > memcpy(__get_dynamic_array(file_digest), vi->file_digest, > __get_dynamic_array_len(file_digest)); > ), > - TP_printk("ino %lu data_size %llu tree_size %lld merkle_block %u levels > %u root_hash %s digest %s", > - (unsigned long) __entry->ino, > + TP_printk("ino %llu data_size %llu tree_size %lld merkle_block %u > levels %u root_hash %s digest %s", > + __entry->ino, > __entry->data_size, > __entry->tree_size, > __entry->merkle_block, > @@ -75,7 +75,7 @@ TRACE_EVENT(fsverity_verify_data_block, > u64 data_pos), > TP_ARGS(inode, params, data_pos), > TP_STRUCT__entry( > - __field(ino_t, ino) > + __field(u64, ino) > __field(u64, data_pos) > __field(unsigned int, merkle_block) > ), > @@ -84,8 +84,8 @@ TRACE_EVENT(fsverity_verify_data_block, > __entry->data_pos = data_pos; > __entry->merkle_block = params->block_size; > ), > - TP_printk("ino %lu data_pos %llu merkle_block %u", > - (unsigned long) __entry->ino, > + TP_printk("ino %llu data_pos %llu merkle_block %u", > + __entry->ino, > __entry->data_pos, > __entry->merkle_block) > ); > @@ -96,7 +96,7 @@ TRACE_EVENT(fsverity_merkle_hit, > unsigned int hidx), > TP_ARGS(inode, data_pos, hblock_idx, level, hidx), > TP_STRUCT__entry( > - __field(ino_t, ino) > + __field(u64, ino) > __field(u64, data_pos) Heh, this actually removed a hole, but again, why convert ino_t? Anyway, I stopped here. But you get the idea. -- Steve > __field(unsigned long, hblock_idx) > __field(unsigned int, level)
