[PATCH 3/6] mm: move VM_LOCKED check to __mlock_vma_pages_range()

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Michel Lespinasse
Date: Thursday, December 2, 2010 - 5:16 pm

Use a single code path for faulting in pages during mlock.

The reason to have it in this patch series is that I did not want to
update both code paths in a later change that releases mmap_sem when
blocking on disk.

Signed-off-by: Michel Lespinasse <walken@google.com>
---
 mm/mlock.c |   18 +++++++++---------
 1 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/mm/mlock.c b/mm/mlock.c
index 0531173..241a5d2 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -169,7 +169,7 @@ static long __mlock_vma_pages_range(struct vm_area_struct *vma,
 	VM_BUG_ON(end   > vma->vm_end);
 	VM_BUG_ON(!rwsem_is_locked(&mm->mmap_sem));
 
-	gup_flags = FOLL_TOUCH | FOLL_MLOCK;
+	gup_flags = FOLL_TOUCH;
 	/*
 	 * We want to touch writable mappings with a write fault in order
 	 * to break COW, except for shared mappings because these don't COW
@@ -178,6 +178,9 @@ static long __mlock_vma_pages_range(struct vm_area_struct *vma,
 	if ((vma->vm_flags & (VM_WRITE | VM_SHARED)) == VM_WRITE)
 		gup_flags |= FOLL_WRITE;
 
+	if (vma->vm_flags & VM_LOCKED)
+		gup_flags |= FOLL_MLOCK;
+
 	/* We don't try to access the guard page of a stack vma */
 	if (stack_guard_page(vma, start)) {
 		addr += PAGE_SIZE;
@@ -456,14 +459,11 @@ static int do_mlock_pages(unsigned long start, size_t len)
 		/*
 		 * Now fault in a range of pages within the first VMA.
 		 */
-		if (vma->vm_flags & VM_LOCKED) {
-			ret = __mlock_vma_pages_range(vma, nstart, nend);
-			if (ret) {
-				ret = __mlock_posix_error_return(ret);
-				break;
-			}
-		} else
-			make_pages_present(nstart, nend);
+		ret = __mlock_vma_pages_range(vma, nstart, nend);
+		if (ret) {
+			ret = __mlock_posix_error_return(ret);
+			break;
+		}
 	}
 	up_read(&mm->mmap_sem);
 	return ret;	/* 0 or negative error code */
-- 
1.7.3.1

--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 1/6] mlock: only hold mmap_sem in shared mode when ..., Michel Lespinasse, (Thu Dec 2, 5:16 pm)
[PATCH 3/6] mm: move VM_LOCKED check to __mlock_vma_pages_ ..., Michel Lespinasse, (Thu Dec 2, 5:16 pm)
[PATCH 4/6] rwsem: implement rwsem_is_contended(), Michel Lespinasse, (Thu Dec 2, 5:16 pm)
Re: [PATCH 1/6] mlock: only hold mmap_sem in shared mode w ..., Michel Lespinasse, (Thu Dec 9, 11:39 pm)
Re: [PATCH 1/6] mlock: only hold mmap_sem in shared mode w ..., Michel Lespinasse, (Mon Dec 13, 5:51 pm)
Re: [PATCH 1/6] mlock: only hold mmap_sem in shared mode w ..., Michel Lespinasse, (Mon Dec 13, 6:26 pm)
Re: [PATCH 1/6] mlock: only hold mmap_sem in shared mode w ..., Michel Lespinasse, (Tue Dec 14, 4:22 pm)