From 1fb539df61bc4556532675933681f8d0f064ef04 Mon Sep 17 00:00:00 2001 From: "Liam R. Howlett" Date: Tue, 1 Mar 2022 13:05:48 -0500 Subject: [PATCH] mas_align fix Signed-off-by: Liam R. Howlett --- mm/mmap.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/mm/mmap.c b/mm/mmap.c index 9707bd8b41ceb..5decb8782e042 100644 --- 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 -- 2.50.1