Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

alloc_tag: avoid warnings when freeing non-compound "tail" pages

When freeing "tail" pages of a non-compount high-order page, we properly
subtract the allocation tag counters, however later when these pages are
released, alloc_tag_sub() will issue warnings because tags for these pages
are NULL.

This issue was originally anticipated by Vlastimil in his review [1] and
then recently reported by David. Prevent warnings by marking the tags
empty.

Link: https://lkml.kernel.org/r/20250915212756.3998938-4-surenb@google.com
Link: https://lore.kernel.org/all/6db0f0c8-81cb-4d04-9560-ba73d63db4b8@suse.cz/ [1]
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Suggested-by: David Wang <00107082@163.com>
Acked-by: Shakeel Butt <shakeel.butt@linux.dev>
Acked-by: Usama Arif <usamaarif642@gmail.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Kent Overstreet <kent.overstreet@linux.dev>
Cc: Pasha Tatashin <pasha.tatashin@soleen.com>
Cc: Sourav Panda <souravpanda@google.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

Suren Baghdasaryan and committed by
Andrew Morton
7ffc923e 9e8a0bbb

+8 -1
+8 -1
mm/page_alloc.c
··· 5240 5240 __free_frozen_pages(page, order, fpi_flags); 5241 5241 else if (!head) { 5242 5242 pgalloc_tag_sub_pages(tag, (1 << order) - 1); 5243 - while (order-- > 0) 5243 + while (order-- > 0) { 5244 + /* 5245 + * The "tail" pages of this non-compound high-order 5246 + * page will have no code tags, so to avoid warnings 5247 + * mark them as empty. 5248 + */ 5249 + clear_page_tag_ref(page + (1 << order)); 5244 5250 __free_frozen_pages(page + (1 << order), order, 5245 5251 fpi_flags); 5252 + } 5246 5253 } 5247 5254 } 5248 5255