mm: fix for infinite churning of mlocked pages
[pandora-kernel.git] / mm / rmap.c
index c9ccc1a..0895b5c 100644 (file)
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -358,6 +358,7 @@ static int page_referenced_one(struct page *page,
         */
        if (vma->vm_flags & VM_LOCKED) {
                *mapcount = 1;  /* break early from loop */
+               *vm_flags |= VM_LOCKED;
                goto out_unmap;
        }
 
@@ -703,8 +704,10 @@ void page_add_new_anon_rmap(struct page *page,
  */
 void page_add_file_rmap(struct page *page)
 {
-       if (atomic_inc_and_test(&page->_mapcount))
+       if (atomic_inc_and_test(&page->_mapcount)) {
                __inc_zone_page_state(page, NR_FILE_MAPPED);
+               mem_cgroup_update_mapped_file_stat(page, 1);
+       }
 }
 
 #ifdef CONFIG_DEBUG_VM
@@ -753,6 +756,7 @@ void page_remove_rmap(struct page *page)
                        mem_cgroup_uncharge_page(page);
                __dec_zone_page_state(page,
                        PageAnon(page) ? NR_ANON_PAGES : NR_FILE_MAPPED);
+               mem_cgroup_update_mapped_file_stat(page, -1);
                /*
                 * It would be tidy to reset the PageAnon mapping here,
                 * but that might overwrite a racing page_add_anon_rmap