Re: [PATCH v2 5/6] mm/page_owner: move free_ts_nsec output to free section in __dump_page_owner()
From: Ye Liu
Date: Sun Jun 28 2026 - 22:38:49 EST
在 2026/6/27 02:55, Zi Yan 写道:
> On Thu Jun 25, 2026 at 10:45 PM EDT, Ye Liu wrote:
>> The free_ts_nsec field is a free-event timestamp, but it was printed
>> in the allocation summary line alongside ts_nsec (allocation time).
>> Move it to the free section where it logically belongs, together with
>> free_pid and free_tgid. This also makes __dump_page_owner() consistent
>> with print_page_owner(), which only prints ts_nsec in the allocation
>> summary.
>>
>> The output now groups all free-related information (pid, tgid,
>> timestamp, stack trace) in one place.
>>
>> No functional change except output formatting.
>>
>> Signed-off-by: Ye Liu <ye.liu@xxxxxxxxx>
>> ---
>> mm/page_owner.c | 9 +++++----
>> 1 file changed, 5 insertions(+), 4 deletions(-)
>>
>> diff --git a/mm/page_owner.c b/mm/page_owner.c
>> index 958151ccb587..eaccff355cb4 100644
>> --- a/mm/page_owner.c
>> +++ b/mm/page_owner.c
>> @@ -660,10 +660,10 @@ void __dump_page_owner(const struct page *page)
>> else
>> pr_alert("page_owner tracks the page as freed\n");
>>
>> - pr_alert("page last allocated via order %u, migratetype %s, gfp_mask %#x(%pGg), pid %d, tgid %d (%s), ts %llu, free_ts %llu\n",
>> + pr_alert("page last allocated via order %u, migratetype %s, gfp_mask %#x(%pGg), pid %d, tgid %d (%s), ts %llu\n",
>
> Is it going to break existing programs parsing this information? This is
> under debugfs, so probably does not matter?
This is debugfs output, not a stable ABI — debugfs format can change at any time.
The field just moves position within the same function's output.
Grouping all free-related info together makes __dump_page_owner() consistent
with print_page_owner(), which already only prints ts_nsec in its allocation line.
I'm not aware of any tools that parse this field, but if there are, I'm happy to
update them as well.
>
>> page_owner->order, migratetype_names[mt], gfp_mask, &gfp_mask,
>> page_owner->pid, page_owner->tgid, page_owner->comm,
>> - page_owner->ts_nsec, page_owner->free_ts_nsec);
>> + page_owner->ts_nsec);
>>
>> handle = READ_ONCE(page_owner->handle);
>> if (!handle)
>> @@ -675,8 +675,9 @@ void __dump_page_owner(const struct page *page)
>> if (!handle) {
>> pr_alert("page_owner free stack trace missing\n");
>> } else {
>> - pr_alert("page last free pid %d tgid %d stack trace:\n",
>> - page_owner->free_pid, page_owner->free_tgid);
>> + pr_alert("page last free pid %d tgid %d ts %llu stack trace:\n",
>> + page_owner->free_pid, page_owner->free_tgid,
>> + page_owner->free_ts_nsec);
>> stack_depot_print(handle);
>> }
>>
>
>
>
>
--
Thanks,
Ye Liu