On Tue, 27 Oct 2026 17:40:13 +0800
Xuewen Wang <[email protected]> wrote:

> +TRACE_EVENT(shmem_swapin_folio,
> +
> +     TP_PROTO(struct inode *inode, pgoff_t index,
> +              unsigned int entry_type, pgoff_t entry_offset,
> +              int requested_order, int actual_order, unsigned int path,
> +              unsigned int fallback, int fallback_error, int error),
> +
> +     TP_ARGS(inode, index, entry_type, entry_offset, requested_order,
> +             actual_order, path, fallback, fallback_error, error),
> +
> +     TP_STRUCT__entry(
> +             __field(dev_t, dev)
> +             __field(unsigned long, ino)
> +             __field(unsigned long, index)
> +             __field(unsigned int, entry_type)
> +             __field(unsigned long, entry_offset)
> +             __field(int, requested_order)
> +             __field(int, actual_order)
> +             __field(unsigned int, path)
> +             __field(unsigned int, fallback)
> +             __field(int, fallback_error)
> +             __field(int, error)

There's a lot of holes in the above structure.

dev_t is 4 bytes in size, which means you have a 4 byte hole between that
and the ino (on 64 bit machines).

And another 4 byte hole between entry_type and entry_offset.

Move the longs to the beginning and the ints after that. The order of the
structure isn't important for the output, but is important for saving ring
buffer space.

-- Steve

> +     ),
> +
> +     TP_fast_assign(
> +             __entry->dev = inode->i_sb->s_dev;
> +             __entry->ino = inode->i_ino;
> +             __entry->index = index;
> +             __entry->entry_type = entry_type;
> +             __entry->entry_offset = entry_offset;
> +             __entry->requested_order = requested_order;
> +             __entry->actual_order = actual_order;
> +             __entry->path = path;
> +             __entry->fallback = fallback;
> +             __entry->fallback_error = fallback_error;
> +             __entry->error = error;
> +     ),
> +
> +     TP_printk("dev=%d:%d ino=%lu index=%lu entry=%u:%lu requested_order=%d 
> actual_order=%d path=%s fallback=%s fallback_error=%d error=%d",
> +               MAJOR(__entry->dev), MINOR(__entry->dev),
> +               __entry->ino, __entry->index,
> +               __entry->entry_type, __entry->entry_offset,
> +               __entry->requested_order, __entry->actual_order,
> +               __print_symbolic(__entry->path,
> +                                { SHMEM_SWAPIN_LOOKUP, "lookup" },
> +                                { SHMEM_SWAPIN_CACHE, "cache" },
> +                                { SHMEM_SWAPIN_SYNC, "sync" },
> +                                { SHMEM_SWAPIN_READAHEAD, "readahead" },
> +                                { SHMEM_SWAPIN_POISON, "poison" }),
> +               show_shmem_swapin_fallback(__entry->fallback),
> +               __entry->fallback_error, __entry->error)
> +);
> +
> +#endif /* _TRACE_SHMEM_H */
> +
> +/* This part must be outside protection */
> +#include <trace/define_trace.h>

Reply via email to