On 11/25/24 22:01, Matthew Wilcox (Oracle) wrote: > In preparation for allocating frozen pages, stop initialising the page > refcount in __alloc_pages_direct_compact(). > > Signed-off-by: Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx> Reviewed-by: Vlastimil Babka <vbabka@xxxxxxx> > --- > mm/page_alloc.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index 514994cd67b8..0f02cb253bf5 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -3740,7 +3740,6 @@ __alloc_pages_direct_compact(gfp_t gfp_mask, unsigned int order, > if (page) { > struct zone *zone = page_zone(page); > > - set_page_refcounted(page); > zone->compact_blockskip_flush = false; > compaction_defer_reset(zone, order, true); > count_vm_event(COMPACTSUCCESS); > @@ -4342,8 +4341,10 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order, > alloc_flags, ac, > INIT_COMPACT_PRIORITY, > &compact_result); > - if (page) > + if (page) { > + set_page_refcounted(page); > goto got_pg; > + } > > /* > * Checks for costly allocations with __GFP_NORETRY, which > @@ -4425,8 +4426,10 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order, > /* Try direct compaction and then allocating */ > page = __alloc_pages_direct_compact(gfp_mask, order, alloc_flags, ac, > compact_priority, &compact_result); > - if (page) > + if (page) { > + set_page_refcounted(page); > goto got_pg; > + } > > /* Do not loop if specifically requested */ > if (gfp_mask & __GFP_NORETRY)