|
@@ -946,15 +946,18 @@ static int migrate_to_node(struct mm_struct *mm, int source, int dest,
|
|
|
nodemask_t nmask;
|
|
|
LIST_HEAD(pagelist);
|
|
|
int err = 0;
|
|
|
- struct vm_area_struct *vma;
|
|
|
|
|
|
nodes_clear(nmask);
|
|
|
node_set(source, nmask);
|
|
|
|
|
|
- vma = check_range(mm, mm->mmap->vm_start, mm->task_size, &nmask,
|
|
|
+ /*
|
|
|
+ * This does not "check" the range but isolates all pages that
|
|
|
+ * need migration. Between passing in the full user address
|
|
|
+ * space range and MPOL_MF_DISCONTIG_OK, this call can not fail.
|
|
|
+ */
|
|
|
+ VM_BUG_ON(!(flags & (MPOL_MF_MOVE | MPOL_MF_MOVE_ALL)));
|
|
|
+ check_range(mm, mm->mmap->vm_start, mm->task_size, &nmask,
|
|
|
flags | MPOL_MF_DISCONTIG_OK, &pagelist);
|
|
|
- if (IS_ERR(vma))
|
|
|
- return PTR_ERR(vma);
|
|
|
|
|
|
if (!list_empty(&pagelist)) {
|
|
|
err = migrate_pages(&pagelist, new_node_page, dest,
|