diff options
Diffstat (limited to 'mm/ksm.c')
-rw-r--r-- | mm/ksm.c | 11 |
1 files changed, 11 insertions, 0 deletions
@@ -28,6 +28,7 @@ | |||
28 | #include <linux/kthread.h> | 28 | #include <linux/kthread.h> |
29 | #include <linux/wait.h> | 29 | #include <linux/wait.h> |
30 | #include <linux/slab.h> | 30 | #include <linux/slab.h> |
31 | #include <linux/memcontrol.h> | ||
31 | #include <linux/rbtree.h> | 32 | #include <linux/rbtree.h> |
32 | #include <linux/memory.h> | 33 | #include <linux/memory.h> |
33 | #include <linux/mmu_notifier.h> | 34 | #include <linux/mmu_notifier.h> |
@@ -1571,6 +1572,16 @@ struct page *ksm_does_need_to_copy(struct page *page, | |||
1571 | 1572 | ||
1572 | new_page = alloc_page_vma(GFP_HIGHUSER_MOVABLE, vma, address); | 1573 | new_page = alloc_page_vma(GFP_HIGHUSER_MOVABLE, vma, address); |
1573 | if (new_page) { | 1574 | if (new_page) { |
1575 | /* | ||
1576 | * The memcg-specific accounting when moving | ||
1577 | * pages around the LRU lists relies on the | ||
1578 | * page's owner (memcg) to be valid. Usually, | ||
1579 | * pages are assigned to a new owner before | ||
1580 | * being put on the LRU list, but since this | ||
1581 | * is not the case here, the stale owner from | ||
1582 | * a previous allocation cycle must be reset. | ||
1583 | */ | ||
1584 | mem_cgroup_reset_owner(new_page); | ||
1574 | copy_user_highpage(new_page, page, address, vma); | 1585 | copy_user_highpage(new_page, page, address, vma); |
1575 | 1586 | ||
1576 | SetPageDirty(new_page); | 1587 | SetPageDirty(new_page); |