aboutsummaryrefslogtreecommitdiffstats
path: root/mm/memory.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/memory.c')
-rw-r--r--mm/memory.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/mm/memory.c b/mm/memory.c
index 1a435b81876c..f47ffe971012 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -2648,8 +2648,9 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
2648 entry = maybe_mkwrite(pte_mkdirty(entry), vma); 2648 entry = maybe_mkwrite(pte_mkdirty(entry), vma);
2649 2649
2650 page_table = pte_offset_map_lock(mm, pmd, address, &ptl); 2650 page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
2651 if (!pte_none(*page_table)) 2651 if (!pte_none(*page_table) || ksm_test_exit(mm))
2652 goto release; 2652 goto release;
2653
2653 inc_mm_counter(mm, anon_rss); 2654 inc_mm_counter(mm, anon_rss);
2654 page_add_new_anon_rmap(page, vma, address); 2655 page_add_new_anon_rmap(page, vma, address);
2655 set_pte_at(mm, address, page_table, entry); 2656 set_pte_at(mm, address, page_table, entry);
@@ -2791,7 +2792,7 @@ static int __do_fault(struct mm_struct *mm, struct vm_area_struct *vma,
2791 * handle that later. 2792 * handle that later.
2792 */ 2793 */
2793 /* Only go through if we didn't race with anybody else... */ 2794 /* Only go through if we didn't race with anybody else... */
2794 if (likely(pte_same(*page_table, orig_pte))) { 2795 if (likely(pte_same(*page_table, orig_pte) && !ksm_test_exit(mm))) {
2795 flush_icache_page(vma, page); 2796 flush_icache_page(vma, page);
2796 entry = mk_pte(page, vma->vm_page_prot); 2797 entry = mk_pte(page, vma->vm_page_prot);
2797 if (flags & FAULT_FLAG_WRITE) 2798 if (flags & FAULT_FLAG_WRITE)