]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mas_align fix
authorLiam R. Howlett <Liam.Howlett@oracle.com>
Tue, 1 Mar 2022 18:05:48 +0000 (13:05 -0500)
committerLiam R. Howlett <Liam.Howlett@oracle.com>
Tue, 8 Mar 2022 18:19:15 +0000 (13:19 -0500)
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
mm/mmap.c

index 9707bd8b41cebfabcf8befa510e0d301e9a5c1dc..5decb8782e042faac96fd7edf409828a52f5c7ae 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -2340,16 +2340,14 @@ do_mas_align_munmap(struct ma_state *mas, struct vm_area_struct *vma,
                if (error)
                        return error;
 
-               prev = vma;
                mas_set(mas, start);
                vma = mas_walk(mas);
-               prev = mas_prev(mas, 0);
-       } else {
-               prev = mas_prev(mas, 0);
-               if (unlikely((!prev)))
-                       mas_set(mas, start);
        }
 
+       prev = mas_prev(mas, 0);
+       if (unlikely((!prev)))
+               mas_set(mas, start);
+
        /*
         * Detach a range of VMAs from the mm. Using next as a temp variable as
         * it is always overwritten.
@@ -2358,12 +2356,16 @@ do_mas_align_munmap(struct ma_state *mas, struct vm_area_struct *vma,
                /* Does it split the end? */
                if (next->vm_end > end) {
                        int error;
+                       struct vm_area_struct *tmp = next;
 
                        error = __split_vma(mm, next, end, 1);
                        if (error)
                                return error;
+
                        mas_set(mas, end);
                        next = mas_prev(mas, 0);
+                       if (tmp == vma)
+                               vma = next;
                }
                count++;
 #ifdef CONFIG_DEBUG_VM_MAPLE_TREE