|
@@ -326,12 +326,13 @@ int migrate_page_move_mapping(struct address_space *mapping,
|
|
|
return -EAGAIN;
|
|
|
|
|
|
/* No turning back from here */
|
|
|
- set_page_memcg(newpage, page_memcg(page));
|
|
|
newpage->index = page->index;
|
|
|
newpage->mapping = page->mapping;
|
|
|
if (PageSwapBacked(page))
|
|
|
SetPageSwapBacked(newpage);
|
|
|
|
|
|
+ mem_cgroup_migrate(page, newpage);
|
|
|
+
|
|
|
return MIGRATEPAGE_SUCCESS;
|
|
|
}
|
|
|
|
|
@@ -373,7 +374,6 @@ int migrate_page_move_mapping(struct address_space *mapping,
|
|
|
* Now we know that no one else is looking at the page:
|
|
|
* no turning back from here.
|
|
|
*/
|
|
|
- set_page_memcg(newpage, page_memcg(page));
|
|
|
newpage->index = page->index;
|
|
|
newpage->mapping = page->mapping;
|
|
|
if (PageSwapBacked(page))
|
|
@@ -428,6 +428,8 @@ int migrate_page_move_mapping(struct address_space *mapping,
|
|
|
}
|
|
|
local_irq_enable();
|
|
|
|
|
|
+ mem_cgroup_migrate(page, newpage);
|
|
|
+
|
|
|
return MIGRATEPAGE_SUCCESS;
|
|
|
}
|
|
|
|
|
@@ -458,9 +460,9 @@ int migrate_huge_page_move_mapping(struct address_space *mapping,
|
|
|
return -EAGAIN;
|
|
|
}
|
|
|
|
|
|
- set_page_memcg(newpage, page_memcg(page));
|
|
|
newpage->index = page->index;
|
|
|
newpage->mapping = page->mapping;
|
|
|
+
|
|
|
get_page(newpage);
|
|
|
|
|
|
radix_tree_replace_slot(pslot, newpage);
|
|
@@ -468,6 +470,9 @@ int migrate_huge_page_move_mapping(struct address_space *mapping,
|
|
|
page_unfreeze_refs(page, expected_count - 1);
|
|
|
|
|
|
spin_unlock_irq(&mapping->tree_lock);
|
|
|
+
|
|
|
+ mem_cgroup_migrate(page, newpage);
|
|
|
+
|
|
|
return MIGRATEPAGE_SUCCESS;
|
|
|
}
|
|
|
|
|
@@ -775,7 +780,6 @@ static int move_to_new_page(struct page *newpage, struct page *page,
|
|
|
* page is freed; but stats require that PageAnon be left as PageAnon.
|
|
|
*/
|
|
|
if (rc == MIGRATEPAGE_SUCCESS) {
|
|
|
- set_page_memcg(page, NULL);
|
|
|
if (!PageAnon(page))
|
|
|
page->mapping = NULL;
|
|
|
}
|
|
@@ -1842,8 +1846,7 @@ fail_putback:
|
|
|
}
|
|
|
|
|
|
mlock_migrate_page(new_page, page);
|
|
|
- set_page_memcg(new_page, page_memcg(page));
|
|
|
- set_page_memcg(page, NULL);
|
|
|
+ mem_cgroup_migrate(page, new_page);
|
|
|
page_remove_rmap(page, true);
|
|
|
set_page_owner_migrate_reason(new_page, MR_NUMA_MISPLACED);
|
|
|
|