diff options
author | Michel Lespinasse <walken@google.com> | 2011-02-10 18:01:33 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-02-11 19:12:20 -0500 |
commit | 419d8c96dbfa558f00e623023917d0a5afc46129 (patch) | |
tree | 74882b1ed7340d3d0e448b343c52fd12969ea518 | |
parent | e15f8c01af924e611bc7be1e45449c4a74e5dfdd (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.c | 6 |
1 files changed, 0 insertions, 6 deletions
diff --git a/mm/memory.c b/mm/memory.c index 32df03cf13a5..8e8c18324863 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 { |