mm/mmap: Fix do_mas_align_munmap() last searching.
authorLiam R. Howlett <Liam.Howlett@Oracle.com>
Fri, 18 Dec 2020 18:55:19 +0000 (13:55 -0500)
committerLiam R. Howlett <Liam.Howlett@Oracle.com>
Tue, 5 Jan 2021 17:33:40 +0000 (12:33 -0500)
Probably linked list fallout?

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

index 1ea06a183c9bdd219adbbfd335c3c04efc8ccafa..d3c321796ec491566ae630c2742c50f4f30a8391 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -2373,7 +2373,9 @@ int do_mas_align_munmap(struct ma_state *mas, struct vm_area_struct *vma,
                last = vma;
        else {
                tmp = *mas;
-               last = mas_next(&tmp, -1);
+               mas_reset(&tmp);
+               mas_set(&tmp, end - 1);
+               last = mas_walk(&tmp);
        }
 
        /* Does it split the last one? */
@@ -2470,7 +2472,8 @@ int do_mas_munmap(struct ma_state *mas, struct mm_struct *mm,
        if (!vma)
                return 0;
 
-       mas->last = end - 1;
+//     printk("vma found at %lx %lu\n", vma->vm_start, vma->vm_end);
+       mas_set_range(mas, start, end - 1);
        return do_mas_align_munmap(mas, vma, mm, start, end, uf, downgrade);
 }
 /* do_munmap() - Wrapper function for non-maple tree aware do_munmap() calls.
@@ -2675,6 +2678,7 @@ cannot_expand:
        mas_set_range(&mas, addr, end - 1);
        mas_walk(&mas);
        vma_mas_link(mm, vma, &mas);
+
        /* Once vma denies write, undo our temporary denial count */
        if (file) {
 unmap_writable: