Any user is supposed to zero their allocated page->private at free time, including both head and tail pages if the freed page is compound. Add VM_WARN_ON_ONCE to check page->private.
Whoever encountering warnings from this commit needs to fix code that does not zero ->private when freeing a page/folio. Signed-off-by: Zi Yan <[email protected]> Cc: Vlastimil Babka <[email protected]> Cc: Suren Baghdasaryan <[email protected]> Cc: Michal Hocko <[email protected]> Cc: Brendan Jackman <[email protected]> Cc: Johannes Weiner <[email protected]> Cc: [email protected] --- mm/page_alloc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index d88c8c67ac0b..d8b7f36e9364 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1410,6 +1410,7 @@ __always_inline bool __free_pages_prepare(struct page *page, } } (page + i)->flags.f &= ~PAGE_FLAGS_CHECK_AT_PREP; + VM_WARN_ON_ONCE((page + i)->private); } } if (folio_test_anon(folio)) { @@ -1429,7 +1430,7 @@ __always_inline bool __free_pages_prepare(struct page *page, page_cpupid_reset_last(page); page->flags.f &= ~PAGE_FLAGS_CHECK_AT_PREP; - page->private = 0; + VM_WARN_ON_ONCE(page->private); reset_page_owner(page, order); page_table_check_free(page, order); pgalloc_tag_sub(page, 1 << order); -- 2.51.0
