From: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx> There is no reason to implement it's own function for migration target allocation. Use standard one. Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx> --- mm/internal.h | 3 --- mm/mempolicy.c | 32 +++----------------------------- mm/migrate.c | 3 ++- 3 files changed, 5 insertions(+), 33 deletions(-) diff --git a/mm/internal.h b/mm/internal.h index 6f5d810..82495ee 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -612,9 +612,6 @@ static inline bool is_migrate_highatomic_page(struct page *page) } void setup_zone_pageset(struct zone *zone); -struct alloc_control; -extern struct page *alloc_new_node_page(struct page *page, - struct alloc_control *ac); struct alloc_control { int nid; /* preferred node id */ diff --git a/mm/mempolicy.c b/mm/mempolicy.c index e50c3eb..27329bdf 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -1065,33 +1065,6 @@ static int migrate_page_add(struct page *page, struct list_head *pagelist, return 0; } -/* page allocation callback for NUMA node migration */ -struct page *alloc_new_node_page(struct page *page, struct alloc_control *__ac) -{ - if (PageHuge(page)) { - struct hstate *h = page_hstate(compound_head(page)); - struct alloc_control ac = { - .nid = __ac->nid, - .nmask = NULL, - .gfp_mask = __GFP_THISNODE, - }; - - return alloc_huge_page_nodemask(h, &ac); - } else if (PageTransHuge(page)) { - struct page *thp; - - thp = alloc_pages_node(__ac->nid, - (GFP_TRANSHUGE | __GFP_THISNODE), - HPAGE_PMD_ORDER); - if (!thp) - return NULL; - prep_transhuge_page(thp); - return thp; - } else - return __alloc_pages_node(__ac->nid, GFP_HIGHUSER_MOVABLE | - __GFP_THISNODE, 0); -} - /* * Migrate pages from one node to a target node. * Returns error or the number of pages not migrated. @@ -1104,6 +1077,7 @@ static int migrate_to_node(struct mm_struct *mm, int source, int dest, int err = 0; struct alloc_control ac = { .nid = dest, + .gfp_mask = GFP_HIGHUSER_MOVABLE | __GFP_THISNODE, }; nodes_clear(nmask); @@ -1119,8 +1093,8 @@ static int migrate_to_node(struct mm_struct *mm, int source, int dest, flags | MPOL_MF_DISCONTIG_OK, &pagelist); if (!list_empty(&pagelist)) { - err = migrate_pages(&pagelist, alloc_new_node_page, NULL, &ac, - MIGRATE_SYNC, MR_SYSCALL); + err = migrate_pages(&pagelist, alloc_migration_target, NULL, + &ac, MIGRATE_SYNC, MR_SYSCALL); if (err) putback_movable_pages(&pagelist); } diff --git a/mm/migrate.c b/mm/migrate.c index 780135a..393f592 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -1590,9 +1590,10 @@ static int do_move_pages_to_node(struct mm_struct *mm, int err; struct alloc_control ac = { .nid = node, + .gfp_mask = GFP_HIGHUSER_MOVABLE | __GFP_THISNODE, }; - err = migrate_pages(pagelist, alloc_new_node_page, NULL, &ac, + err = migrate_pages(pagelist, alloc_migration_target, NULL, &ac, MIGRATE_SYNC, MR_SYSCALL); if (err) putback_movable_pages(pagelist); -- 2.7.4