static int vma_link(struct mm_struct *mm, struct vm_area_struct *vma)
{
- MA_STATE(mas, &mm->mm_mt, 0, 0);
+ MA_STATE(mas, &mm->mm_mt, vma->vm_start, vma->vm_end - 1);
struct address_space *mapping = NULL;
if (mas_preallocate(&mas, vma, GFP_KERNEL))
/* Only handles expanding */
VM_BUG_ON(vma->vm_start < start || vma->vm_end > end);
+ mas_set_range(mas, start, end - 1);
if (mas_preallocate(mas, vma, GFP_KERNEL))
goto nomem;
struct vm_area_struct *next;
unsigned long gap_addr;
int error = 0;
- MA_STATE(mas, &mm->mm_mt, 0, 0);
+ MA_STATE(mas, &mm->mm_mt, vma->vm_start, address - 1);
if (!(vma->vm_flags & VM_GROWSUP))
return -EFAULT;
/* Check that both stack segments have the same anon_vma? */
}
+ mas->last = address - 1;
if (mas_preallocate(&mas, vma, GFP_KERNEL))
return -ENOMEM;
return -ENOMEM;
}
+ mas_set_range(&mas, address, vma->vm_end - 1);
if (mas_preallocate(&mas, vma, GFP_KERNEL))
return -ENOMEM;
int ret;
struct mm_struct *mm = current->mm;
LIST_HEAD(uf);
- MA_STATE(mas, &mm->mm_mt, start, start);
+ MA_STATE(mas, &mm->mm_mt, start, start + len);
if (mmap_write_lock_killable(mm))
return -EINTR;