diff --git a/[refs] b/[refs] index c8c53decc9ba..30d6b5f7bd99 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 52abb700e16a9aa4cbc03f3d7f80206cbbc80680 +refs/heads/master: 83cd904d271ba960c53f3adbb037f3486518f1e6 diff --git a/trunk/mm/mmap.c b/trunk/mm/mmap.c index 09ce2cae07ca..da15a79b1441 100644 --- a/trunk/mm/mmap.c +++ b/trunk/mm/mmap.c @@ -1608,7 +1608,6 @@ EXPORT_SYMBOL(find_vma); /* * Same as find_vma, but also return a pointer to the previous VMA in *pprev. - * Note: pprev is set to NULL when return value is NULL. */ struct vm_area_struct * find_vma_prev(struct mm_struct *mm, unsigned long addr, @@ -1617,7 +1616,16 @@ find_vma_prev(struct mm_struct *mm, unsigned long addr, struct vm_area_struct *vma; vma = find_vma(mm, addr); - *pprev = vma ? vma->vm_prev : NULL; + if (vma) { + *pprev = vma->vm_prev; + } else { + struct rb_node *rb_node = mm->mm_rb.rb_node; + *pprev = NULL; + while (rb_node) { + *pprev = rb_entry(rb_node, struct vm_area_struct, vm_rb); + rb_node = rb_node->rb_right; + } + } return vma; }