@@ -3926,11 +3929,11 @@ static void setup_zone_migrate_reserve(struct zone *zone) /* * Reserve blocks are generally in place to help high-order atomic * allocations that are short-lived. A min_free_kbytes value that - * would result in more than 2 reserve blocks for atomic allocations - * is assumed to be in place to help anti-fragmentation for the - * future allocation of hugepages at runtime. + * would result in more than MAX_MIGRATE_RESERVE_BLOCKS reserve blocks + * for atomic allocations is assumed to be in place to help + * anti-fragmentation for the future allocation of hugepages at runtime. */ - reserve = min(2, reserve); + reserve = min(MAX_MIGRATE_RESERVE_BLOCKS, reserve); for (pfn = start_pfn; pfn < end_pfn; pfn += pageblock_nr_pages) { if (!pfn_valid(pfn)) @@ -3956,6 +3959,7 @@ static void setup_zone_migrate_reserve(struct zone *zone) /* If this block is reserved, account for it */ if (block_migratetype == MIGRATE_RESERVE) { reserve--; + found++; continue; } @@ -3970,6 +3974,10 @@ static void setup_zone_migrate_reserve(struct zone *zone) } } + /* If all possible reserve blocks have been found, we're done */ + if (found >= MAX_MIGRATE_RESERVE_BLOCKS) + break; + /* * If the reserve is met and this is a previous reserved block, * take it back
Nit. I would like to add following hunk. This is just nit because moving reserve pageblock is extreme rare. if (block_migratetype == MIGRATE_RESERVE) { + found++; set_pageblock_migratetype(page, MIGRATE_MOVABLE); move_freepages_block(zone, page, MIGRATE_MOVABLE); } -- 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>