On Fri, 5 Jan 2018, Michal Hocko wrote: > I believe there should be some cap on the number of pages. We shouldn't > keep it held for million of pages if all of them are moved to the same > node. I would really like to postpone that to later unless it causes > some noticeable regressions because this would complicate the code > further and I am not sure this is all worth it. Attached a patch to make the code more readable. Also why are you migrating the pages on pagelist if a add_page_for_migration() fails? One could simply update the status in user space and continue. Index: linux/mm/migrate.c =================================================================== --- linux.orig/mm/migrate.c +++ linux/mm/migrate.c @@ -1584,16 +1584,20 @@ static int do_pages_move(struct mm_struc if (!node_isset(node, task_nodes)) goto out_flush; - if (current_node == NUMA_NO_NODE) { - current_node = node; - start = i; - } else if (node != current_node) { - err = do_move_pages_to_node(mm, &pagelist, current_node); - if (err) - goto out; - err = store_status(status, start, current_node, i - start); - if (err) - goto out; + if (node != current_node) { + + if (current_node != NUMA_NO_NODE) { + + /* Move the pages to current_node */ + err = do_move_pages_to_node(mm, &pagelist, current_node); + if (err) + goto out; + + err = store_status(status, start, current_node, i - start); + if (err) + goto out; + } + start = i; current_node = node; } @@ -1607,6 +1611,10 @@ static int do_pages_move(struct mm_struc if (!err) continue; + /* + * Failure to isolate a page so flush the pages on + * pagelist after storing status and continue. + */ err = store_status(status, i, err, 1); if (err) goto out_flush; @@ -1614,6 +1622,7 @@ static int do_pages_move(struct mm_struc err = do_move_pages_to_node(mm, &pagelist, current_node); if (err) goto out; + if (i > start) { err = store_status(status, start, current_node, i - start); if (err) -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>