struct vm_userfaultfd_ctx vm_userfaultfd_ctx,
struct anon_vma_name *anon_name)
{
+ MA_STATE(mas, &mm->mm_mt, addr, addr);
pgoff_t pglen = (end - addr) >> PAGE_SHIFT;
struct vm_area_struct *area, *next;
int err;
if (vm_flags & VM_SPECIAL)
return NULL;
- next = find_vma(mm, prev ? prev->vm_end : 0);
+ next = mas_find(&mas, end + 1);
area = next;
if (area && area->vm_end == end) /* cases 6, 7, 8 */
- next = find_vma(mm, next->vm_end);
+ next = mas_find(&mas, end + 1);
/* verify some invariant that must be enforced by the caller */
VM_WARN_ON(prev && addr <= prev->vm_start);
is_mergeable_anon_vma(prev->anon_vma,
next->anon_vma, NULL)) {
/* cases 1, 6 */
- err = vma_adjust(prev, prev->vm_start, next->vm_end,
- prev->vm_pgoff, prev);
+ err = vma_expand(&mas, prev, prev->vm_start, next->vm_end,
+ prev->vm_pgoff, next);
} else /* cases 2, 5, 7 */
err = vma_adjust(prev, prev->vm_start, end,
prev->vm_pgoff, prev);