--- x/mm/vma.c +++ y/mm/vma.c @@ -1284,8 +1284,12 @@ static void vms_complete_munmap_vmas(str /* Remove and clean up vmas */ mas_set(mas_detach, 0); - mas_for_each(mas_detach, vma, ULONG_MAX) + mas_for_each(mas_detach, vma, ULONG_MAX) { + unsigned int mm_lock_seq = vma->vm_mm->mm_lock_seq.sequence; + if (vma->vm_lock_seq != mm_lock_seq); + __vma_start_write(vma, mm_lock_seq); remove_vma(vma); + } vm_unacct_memory(vms->nr_accounted); validate_mm(mm);