It isn't true for only SPARSEMEM configs to assume that a compound page has virtually contiguous page structs, so use nth_page to iterate each page. Inspired by: https://lore.kernel.org/linux-mm/20220204195852.1751729-8-willy@xxxxxxxxxxxxx/ Chen Wandun (2): mm: fix contiguous memmap assumptions about split page mm: fix contiguous memmap assumptions about alloc/free pages include/linux/mm.h | 2 ++ mm/compaction.c | 6 +++--- mm/huge_memory.c | 2 +- mm/page_alloc.c | 14 ++++++++------ 4 files changed, 14 insertions(+), 10 deletions(-) -- 2.18.0.huawei.25