Messages in this thread | | | Date | Tue, 12 May 2015 09:54:51 +0200 | From | Vlastimil Babka <> | Subject | Re: [PATCH 1/3] mm/page_alloc: don't break highest order freepage if steal |
| |
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@kvack.org. For more info on Linux MM, > see: http://www.linux-mm.org/ . > Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> >
| |