Re: [PATCH v2 5/6] mm/page_owner: move free_ts_nsec output to free section in __dump_page_owner()

From: Zi Yan

Date: Sun Jun 28 2026 - 22:59:52 EST


On Sun Jun 28, 2026 at 10:36 PM EDT, Ye Liu wrote:
>
>
> 在 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.

OK, feel free to add

Acked-by: Zi Yan <ziy@xxxxxxxxxx>

>
>>
>>> 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);
>>> }
>>>
>>
>>
>>
>>




--
Best Regards,
Yan, Zi