lkml.org 
[lkml]   [2010]   [Dec]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3/6] mm: move VM_LOCKED check to __mlock_vma_pages_range()
    Date
    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


    \
     
     \ /
      Last update: 2010-12-03 01:21    [W:0.041 / U:59.468 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site