prep_compound_tail() makes PageCompound() true. Calling
__SetPageReserved() afterwards violates the PF_NO_COMPOUND policy and
triggers VM_BUG_ON_PGFLAGS() when CONFIG_DEBUG_VM_PGFLAGS is enabled.

Set PG_reserved before preparing the compound tail.

Signed-off-by: Muchun Song <[email protected]>
---
 mm/sparse-vmemmap.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c
index 4be85e194c78..23b31bc4bf94 100644
--- a/mm/sparse-vmemmap.c
+++ b/mm/sparse-vmemmap.c
@@ -222,9 +222,9 @@ struct page __ref *vmemmap_shared_tail_page(unsigned int 
order, struct zone *zon
                atomic_set(&page->_mapcount, -1);
                set_page_node(page, zone_to_nid(zone));
                set_page_zone(page, zone_idx(zone));
-               prep_compound_tail(page, NULL, order);
                if (zone_is_zone_device(zone))
                        __SetPageReserved(page);
+               prep_compound_tail(page, NULL, order);
        }
 
        page = virt_to_page(addr);
-- 
2.54.0


Reply via email to