It is hard to root cause _refcount problems, because they usually manifest after the damage has occurred. Yet, they can lead to catastrophic failures such memory corruptions. Improve debugability by adding more checks that ensure that page->_refcount never turns negative (i.e. double free does not happen, or free after freeze etc). - Check for overflow and underflow right from the functions that modify _refcount - Remove set_page_count(), so we do not unconditionally overwrite _refcount with an unrestrained value - Trace return values in all functions that modify _refcount Applies against v5.15-rc7. Boot tested in QEMU. Pasha Tatashin (8): mm: add overflow and underflow checks for page->_refcount mm/hugetlb: remove useless set_page_count() mm: Avoid using set_page_count() in set_page_recounted() mm: remove set_page_count() from page_frag_alloc_align mm: avoid using set_page_count() when pages are freed into allocator mm: rename init_page_count() -> page_ref_init() mm: remove set_page_count() mm: simplify page_ref_* functions arch/m68k/mm/motorola.c | 2 +- include/linux/mm.h | 2 +- include/linux/page_ref.h | 116 ++++++++++++++++---------------- include/trace/events/page_ref.h | 66 +++++++++++------- mm/debug_page_ref.c | 22 ++---- mm/hugetlb.c | 2 +- mm/internal.h | 5 +- mm/page_alloc.c | 19 ++++-- 8 files changed, 125 insertions(+), 109 deletions(-) -- 2.33.0.1079.g6e70778dc9-goog