Re: [PATCH 1/3] mm/page_alloc: don't break highest order freepage if steal

From: Vlastimil Babka
Date: Tue May 12 2015 - 03:54:57 EST


On 05/12/2015 09:51 AM, Vlastimil Babka wrote:
{
struct page *page;
+ bool steal_fallback;

-retry_reserve:
+retry:
page = __rmqueue_smallest(zone, order, migratetype);

if (unlikely(!page) && migratetype != MIGRATE_RESERVE) {
if (migratetype == MIGRATE_MOVABLE)
page = __rmqueue_cma_fallback(zone, order);

- if (!page)
- page = __rmqueue_fallback(zone, order, migratetype);
+ if (page)
+ goto out;
+
+ steal_fallback = __rmqueue_fallback(zone, order, migratetype);

Oh and the variable can be probably replaced by calling __rmqueue_fallback directly in the if() below.


/*
* Use MIGRATE_RESERVE rather than fail an allocation. goto
* is used because __rmqueue_smallest is an inline function
* and we want just one call site
*/
- if (!page) {
+ if (!steal_fallback)
migratetype = MIGRATE_RESERVE;
- goto retry_reserve;
- }
+
+ goto retry;
}

+out:
trace_mm_page_alloc_zone_locked(page, order, migratetype);
return page;
}


--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxxx For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/