diff options
-rw-r--r-- | mm/ksm.c | 6 | ||||
-rw-r--r-- | mm/memory.c | 5 |
2 files changed, 4 insertions, 7 deletions
@@ -1590,13 +1590,7 @@ struct page *ksm_does_need_to_copy(struct page *page, | |||
1590 | 1590 | ||
1591 | SetPageDirty(new_page); | 1591 | SetPageDirty(new_page); |
1592 | __SetPageUptodate(new_page); | 1592 | __SetPageUptodate(new_page); |
1593 | SetPageSwapBacked(new_page); | ||
1594 | __set_page_locked(new_page); | 1593 | __set_page_locked(new_page); |
1595 | |||
1596 | if (!mlocked_vma_newpage(vma, new_page)) | ||
1597 | lru_cache_add_lru(new_page, LRU_ACTIVE_ANON); | ||
1598 | else | ||
1599 | add_page_to_unevictable_list(new_page); | ||
1600 | } | 1594 | } |
1601 | 1595 | ||
1602 | return new_page; | 1596 | return new_page; |
diff --git a/mm/memory.c b/mm/memory.c index bb1369f7b9b4..0abd07097ec6 100644 --- a/mm/memory.c +++ b/mm/memory.c | |||
@@ -3044,7 +3044,10 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma, | |||
3044 | } | 3044 | } |
3045 | flush_icache_page(vma, page); | 3045 | flush_icache_page(vma, page); |
3046 | set_pte_at(mm, address, page_table, pte); | 3046 | set_pte_at(mm, address, page_table, pte); |
3047 | do_page_add_anon_rmap(page, vma, address, exclusive); | 3047 | if (swapcache) /* ksm created a completely new copy */ |
3048 | page_add_new_anon_rmap(page, vma, address); | ||
3049 | else | ||
3050 | do_page_add_anon_rmap(page, vma, address, exclusive); | ||
3048 | /* It's better to call commit-charge after rmap is established */ | 3051 | /* It's better to call commit-charge after rmap is established */ |
3049 | mem_cgroup_commit_charge_swapin(page, ptr); | 3052 | mem_cgroup_commit_charge_swapin(page, ptr); |
3050 | 3053 | ||