aboutsummaryrefslogtreecommitdiffstats
path: root/mm/mempolicy.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/mempolicy.c')
-rw-r--r--mm/mempolicy.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/mm/mempolicy.c b/mm/mempolicy.c
index f969da5dd8a2..21243b2b7b07 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -931,8 +931,11 @@ static int migrate_to_node(struct mm_struct *mm, int source, int dest,
931 check_range(mm, mm->mmap->vm_start, mm->task_size, &nmask, 931 check_range(mm, mm->mmap->vm_start, mm->task_size, &nmask,
932 flags | MPOL_MF_DISCONTIG_OK, &pagelist); 932 flags | MPOL_MF_DISCONTIG_OK, &pagelist);
933 933
934 if (!list_empty(&pagelist)) 934 if (!list_empty(&pagelist)) {
935 err = migrate_pages(&pagelist, new_node_page, dest, 0); 935 err = migrate_pages(&pagelist, new_node_page, dest, 0);
936 if (err)
937 putback_lru_pages(&pagelist);
938 }
936 939
937 return err; 940 return err;
938} 941}
@@ -1147,9 +1150,12 @@ static long do_mbind(unsigned long start, unsigned long len,
1147 1150
1148 err = mbind_range(mm, start, end, new); 1151 err = mbind_range(mm, start, end, new);
1149 1152
1150 if (!list_empty(&pagelist)) 1153 if (!list_empty(&pagelist)) {
1151 nr_failed = migrate_pages(&pagelist, new_vma_page, 1154 nr_failed = migrate_pages(&pagelist, new_vma_page,
1152 (unsigned long)vma, 0); 1155 (unsigned long)vma, 0);
1156 if (nr_failed)
1157 putback_lru_pages(&pagelist);
1158 }
1153 1159
1154 if (!err && nr_failed && (flags & MPOL_MF_STRICT)) 1160 if (!err && nr_failed && (flags & MPOL_MF_STRICT))
1155 err = -EIO; 1161 err = -EIO;