aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichel Lespinasse <walken@google.com>2011-02-10 18:01:33 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2011-02-11 19:12:20 -0500
commit419d8c96dbfa558f00e623023917d0a5afc46129 (patch)
tree74882b1ed7340d3d0e448b343c52fd12969ea518
parente15f8c01af924e611bc7be1e45449c4a74e5dfdd (diff)
mlock: do not munlock pages in __do_fault()
If the page is going to be written to, __do_page needs to break COW. However, the old page (before breaking COW) was never mapped mapped into the current pte (__do_fault is only called when the pte is not present), so vmscan can't have marked the old page as PageMlocked due to being mapped in __do_fault's VMA. Therefore, __do_fault() does not need to worry about clearing PageMlocked() on the old page. Signed-off-by: Michel Lespinasse <walken@google.com> Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Acked-by: Hugh Dickins <hughd@google.com> Cc: Rik van Riel <riel@redhat.com> Cc: Andrea Arcangeli <aarcange@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--mm/memory.c6
1 files changed, 0 insertions, 6 deletions
diff --git a/mm/memory.c b/mm/memory.c
index 32df03cf13a..8e8c1832486 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -3051,12 +3051,6 @@ static int __do_fault(struct mm_struct *mm, struct vm_area_struct *vma,
3051 goto out; 3051 goto out;
3052 } 3052 }
3053 charged = 1; 3053 charged = 1;
3054 /*
3055 * Don't let another task, with possibly unlocked vma,
3056 * keep the mlocked page.
3057 */
3058 if (vma->vm_flags & VM_LOCKED)
3059 clear_page_mlock(vmf.page);
3060 copy_user_highpage(page, vmf.page, address, vma); 3054 copy_user_highpage(page, vmf.page, address, vma);
3061 __SetPageUptodate(page); 3055 __SetPageUptodate(page);
3062 } else { 3056 } else {