]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm/mmap: Change find_vma_prev() to use maple tree
authorLiam R. Howlett <Liam.Howlett@Oracle.com>
Fri, 24 Jul 2020 15:48:08 +0000 (11:48 -0400)
committerLiam R. Howlett <Liam.Howlett@Oracle.com>
Fri, 30 Oct 2020 19:07:24 +0000 (15:07 -0400)
Change the implementation of find_vma_prev to use the new maple tree
data structure.

Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
mm/mmap.c

index a313bfc9fae92819b7a0b9c1705235a80292d3cf..4069cb10d791ca46a0fabbe409989fa121e89437 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -2590,7 +2590,7 @@ struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr)
 EXPORT_SYMBOL(find_vma);
 
 /**
- * mt_find_vma_prev() - Find the VMA for a given address, or the next vma and
+ * find_vma_prev() - Find the VMA for a given address, or the next vma and
  * sets %pprev to the previous VMA, if any.
  * @mm The mm_struct to check
  * @addr: The address
@@ -2600,52 +2600,22 @@ EXPORT_SYMBOL(find_vma);
  * May return NULL in the case of no vma at addr or above.
  */
 struct vm_area_struct *
-mt_find_vma_prev(struct mm_struct *mm, unsigned long addr,
-                       struct vm_area_struct **pprev)
+find_vma_prev(struct mm_struct *mm, unsigned long addr,
+             struct vm_area_struct **pprev)
 {
        struct vm_area_struct *vma;
        MA_STATE(mas, &mm->mm_mt, addr, addr);
 
        rcu_read_lock();
        vma = mas_find(&mas, ULONG_MAX);
+       if (!vma)
+               mas_reset(&mas);
+
        *pprev = mas_prev(&mas, 0);
        rcu_read_unlock();
        return vma;
 }
 
-/*
- * Same as find_vma, but also return a pointer to the previous VMA in *pprev.
- */
-struct vm_area_struct *
-rb_find_vma_prev(struct mm_struct *mm, unsigned long addr,
-                       struct vm_area_struct **pprev)
-{
-       struct vm_area_struct *vma;
-
-       vma = find_vma(mm, addr);
-       if (vma) {
-               *pprev = vma->vm_prev;
-       } else {
-               struct rb_node *rb_node = rb_last(&mm->mm_rb);
-
-               *pprev = rb_node ? rb_entry(rb_node, struct vm_area_struct, vm_rb) : NULL;
-       }
-       return vma;
-}
-
-struct vm_area_struct *
-find_vma_prev(struct mm_struct *mm, unsigned long addr,
-                       struct vm_area_struct **pprev)
-{
-       struct vm_area_struct *mt_prev;
-       struct vm_area_struct *ret = rb_find_vma_prev(mm, addr, pprev);
-       VM_BUG_ON_VMA((unsigned long)ret !=
-                       (unsigned long)mt_find_vma_prev(mm, addr, &mt_prev),
-                       ret);
-       VM_BUG_ON_VMA(mt_prev != *pprev, *pprev);
-       return ret;
-}
-
 /*
  * Verify that the stack growth is acceptable and
  * update accounting. This is shared with both the