The loop in __alloc_pages_high_priority() seems to be checking for (!page) and (gfp_mask & __GFP_NOFAIL) multiple times. In fact, we don't really need to check (gfp_mask & __GFP_NOFAIL) for every iteration of the loop as the gfp_mask remains constant. Slightly improve the logic in __alloc_pages_high_priority() to eliminate these multiple condition checks. Signed-off-by: Kautuk Consul <consul.kautuk@xxxxxxxxx> --- mm/page_alloc.c | 13 +++++++++---- 1 files changed, 9 insertions(+), 4 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index a13ded1..6bb8b6d 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -2114,14 +2114,19 @@ __alloc_pages_high_priority(gfp_t gfp_mask, unsigned int order, { struct page *page; - do { - page = get_page_from_freelist(gfp_mask, nodemask, order, + page = get_page_from_freelist(gfp_mask, nodemask, order, zonelist, high_zoneidx, ALLOC_NO_WATERMARKS, preferred_zone, migratetype); - if (!page && gfp_mask & __GFP_NOFAIL) + if (gfp_mask & __GFP_NOFAIL) { + while (!page) { wait_iff_congested(preferred_zone, BLK_RW_ASYNC, HZ/50); - } while (!page && (gfp_mask & __GFP_NOFAIL)); + + page = get_page_from_freelist(gfp_mask, nodemask, order, + zonelist, high_zoneidx, ALLOC_NO_WATERMARKS, + preferred_zone, migratetype); + } + } return page; } -- 1.7.5.4 -- 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/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>