|
@@ -489,12 +489,6 @@ check_range(struct mm_struct *mm, unsigned long start, unsigned long end,
|
|
|
int err;
|
|
|
struct vm_area_struct *first, *vma, *prev;
|
|
|
|
|
|
- if (flags & (MPOL_MF_MOVE | MPOL_MF_MOVE_ALL)) {
|
|
|
-
|
|
|
- err = migrate_prep();
|
|
|
- if (err)
|
|
|
- return ERR_PTR(err);
|
|
|
- }
|
|
|
|
|
|
first = find_vma(mm, start);
|
|
|
if (!first)
|
|
@@ -809,9 +803,13 @@ int do_migrate_pages(struct mm_struct *mm,
|
|
|
const nodemask_t *from_nodes, const nodemask_t *to_nodes, int flags)
|
|
|
{
|
|
|
int busy = 0;
|
|
|
- int err = 0;
|
|
|
+ int err;
|
|
|
nodemask_t tmp;
|
|
|
|
|
|
+ err = migrate_prep();
|
|
|
+ if (err)
|
|
|
+ return err;
|
|
|
+
|
|
|
down_read(&mm->mmap_sem);
|
|
|
|
|
|
err = migrate_vmas(mm, from_nodes, to_nodes, flags);
|
|
@@ -974,6 +972,12 @@ static long do_mbind(unsigned long start, unsigned long len,
|
|
|
start, start + len, mode, mode_flags,
|
|
|
nmask ? nodes_addr(*nmask)[0] : -1);
|
|
|
|
|
|
+ if (flags & (MPOL_MF_MOVE | MPOL_MF_MOVE_ALL)) {
|
|
|
+
|
|
|
+ err = migrate_prep();
|
|
|
+ if (err)
|
|
|
+ return err;
|
|
|
+ }
|
|
|
down_write(&mm->mmap_sem);
|
|
|
vma = check_range(mm, start, end, nmask,
|
|
|
flags | MPOL_MF_INVERT, &pagelist);
|