We already have retry logic in migrate_pages(). It does retry 10 times. So if we keep this retrying code in __alloc_contig_migrate_range(), we would try to migrate some unmigratable page in 50 times. There is just one small difference in -ENOMEM case. migrate_pages() don't do retry in this case, however, current __alloc_contig_migrate_range() does. But, I think that this isn't problem, because in this case, we may fail again with same reason. Acked-by: Michal Nazarewicz <mina86@xxxxxxxxxx> Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx> diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 5dba293..674ade7 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -6185,7 +6185,6 @@ static int __alloc_contig_migrate_range(struct compact_control *cc, /* This function is based on compact_zone() from compaction.c. */ unsigned long nr_reclaimed; unsigned long pfn = start; - unsigned int tries = 0; int ret = 0; migrate_prep(); @@ -6204,10 +6203,6 @@ static int __alloc_contig_migrate_range(struct compact_control *cc, ret = -EINTR; break; } - tries = 0; - } else if (++tries == 5) { - ret = ret < 0 ? ret : -EBUSY; - break; } nr_reclaimed = reclaim_clean_pages_from_list(cc->zone, @@ -6216,6 +6211,10 @@ static int __alloc_contig_migrate_range(struct compact_control *cc, ret = migrate_pages(&cc->migratepages, alloc_migrate_target, 0, MIGRATE_SYNC, MR_CMA); + if (ret) { + ret = ret < 0 ? ret : -EBUSY; + break; + } } if (ret < 0) { putback_movable_pages(&cc->migratepages); -- 1.7.9.5 -- 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>