summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mm/migrate.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/mm/migrate.c b/mm/migrate.c
index ff537749d3b4..44c1fa9d6f54 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -443,6 +443,8 @@ int migrate_huge_page_move_mapping(struct address_space *mapping,
443 */ 443 */
444void migrate_page_copy(struct page *newpage, struct page *page) 444void migrate_page_copy(struct page *newpage, struct page *page)
445{ 445{
446 int cpupid;
447
446 if (PageHuge(page) || PageTransHuge(page)) 448 if (PageHuge(page) || PageTransHuge(page))
447 copy_huge_page(newpage, page); 449 copy_huge_page(newpage, page);
448 else 450 else
@@ -479,6 +481,13 @@ void migrate_page_copy(struct page *newpage, struct page *page)
479 __set_page_dirty_nobuffers(newpage); 481 __set_page_dirty_nobuffers(newpage);
480 } 482 }
481 483
484 /*
485 * Copy NUMA information to the new page, to prevent over-eager
486 * future migrations of this same page.
487 */
488 cpupid = page_cpupid_xchg_last(page, -1);
489 page_cpupid_xchg_last(newpage, cpupid);
490
482 mlock_migrate_page(newpage, page); 491 mlock_migrate_page(newpage, page);
483 ksm_migrate_page(newpage, page); 492 ksm_migrate_page(newpage, page);
484 /* 493 /*