--- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -957,9 +957,12 @@ static int alloc_charge_hpage(struct pag { /* Only allocate from the target node */ gfp_t gfp = (cc->is_khugepaged ? alloc_hugepage_khugepaged_gfpmask() : - GFP_TRANSHUGE) | __GFP_THISNODE; + GFP_TRANSHUGE); int node = hpage_collapse_find_target_node(cc); + if (node_online(node)) + gfp |= __GFP_THISNODE; + if (!hpage_collapse_alloc_page(hpage, gfp, node)) return SCAN_ALLOC_HUGE_PAGE_FAIL; if (unlikely(mem_cgroup_charge(page_folio(*hpage), mm, gfp)))