--- x/mm/mmap.c +++ y/mm/mmap.c @@ -2657,8 +2657,6 @@ do_vmi_align_munmap(struct vma_iterator /* Point of no return */ mm->locked_vm -= locked_vm; mm->map_count -= count; - if (unlock) - mmap_write_downgrade(mm); prev = vma_iter_prev_range(vmi); next = vma_next(vmi); @@ -2677,7 +2675,7 @@ do_vmi_align_munmap(struct vma_iterator remove_mt(mm, &mas_detach); validate_mm(mm); if (unlock) - mmap_read_unlock(mm); + mmap_write_unlock(mm); __mt_destroy(&mt_detach); return 0;