From 1ba467f9dca66442cbb95b966ebef320770d7424 Mon Sep 17 00:00:00 2001 From: Konstantin Khlebnikov Date: Fri, 20 Jan 2012 14:34:24 -0800 Subject: [PATCH] --- yaml --- r: 286607 b: refs/heads/master c: 9f9f1acd713d69fae2af286fbeedc6c8963411c6 h: refs/heads/master i: 286605: bb20f408662c7bea717fb2c3721e58704e7735d2 286603: e7a8d639cd6679fedb457875b9f7dfc0e98e5cd7 286599: 9f2a58f4276800f05a8c0858e79388055c9b6e0b 286591: 76420a988489bc021be088ebf3cb7386801e2f3b v: v3 --- [refs] | 2 +- trunk/mm/memory.c | 37 ++++++++++++++++++++++++++++--------- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/[refs] b/[refs] index 90b7e912508f..cb1060976b29 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 245132643e1cfcd145bbc86a716c1818371fcb93 +refs/heads/master: 9f9f1acd713d69fae2af286fbeedc6c8963411c6 diff --git a/trunk/mm/memory.c b/trunk/mm/memory.c index 5e30583c2605..fa2f04e0337c 100644 --- a/trunk/mm/memory.c +++ b/trunk/mm/memory.c @@ -878,15 +878,24 @@ copy_one_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm, } if (likely(!non_swap_entry(entry))) rss[MM_SWAPENTS]++; - else if (is_write_migration_entry(entry) && - is_cow_mapping(vm_flags)) { - /* - * COW mappings require pages in both parent - * and child to be set to read. - */ - make_migration_entry_read(&entry); - pte = swp_entry_to_pte(entry); - set_pte_at(src_mm, addr, src_pte, pte); + else if (is_migration_entry(entry)) { + page = migration_entry_to_page(entry); + + if (PageAnon(page)) + rss[MM_ANONPAGES]++; + else + rss[MM_FILEPAGES]++; + + if (is_write_migration_entry(entry) && + is_cow_mapping(vm_flags)) { + /* + * COW mappings require pages in both + * parent and child to be set to read. + */ + make_migration_entry_read(&entry); + pte = swp_entry_to_pte(entry); + set_pte_at(src_mm, addr, src_pte, pte); + } } } goto out_set_pte; @@ -1191,6 +1200,16 @@ static unsigned long zap_pte_range(struct mmu_gather *tlb, if (!non_swap_entry(entry)) rss[MM_SWAPENTS]--; + else if (is_migration_entry(entry)) { + struct page *page; + + page = migration_entry_to_page(entry); + + if (PageAnon(page)) + rss[MM_ANONPAGES]--; + else + rss[MM_FILEPAGES]--; + } if (unlikely(!free_swap_and_cache(entry))) print_bad_pte(vma, addr, ptent, NULL); }