On Mon, Jan 30, 2012 at 02:06:50PM +0100, Michal Nazarewicz wrote: > >>@@ -1017,11 +1049,14 @@ __rmqueue_fallback(struct zone *zone, int order, int start_migratetype) > >> rmv_page_order(page); > >> > >> /* Take ownership for orders >= pageblock_order */ > >>- if (current_order >= pageblock_order) > >>+ if (current_order >= pageblock_order && > >>+ !is_pageblock_cma(page)) > >> change_pageblock_range(page, current_order, > >> start_migratetype); > >> > >>- expand(zone, page, order, current_order, area, migratetype); > >>+ expand(zone, page, order, current_order, area, > >>+ is_migrate_cma(start_migratetype) > >>+ ? start_migratetype : migratetype); > >> > > > >What is this check meant to be doing? > > > >start_migratetype is determined by allocflags_to_migratetype() and > >that never will be MIGRATE_CMA so is_migrate_cma(start_migratetype) > >should always be false. > > Right, thanks! This should be the other way around, ie.: > > + expand(zone, page, order, current_order, area, > + is_migrate_cma(migratetype) > + ? migratetype : start_migratetype); > > I'll fix this and the calls to is_pageblock_cma(). > That makes a lot more sense. Thanks. I have a vague recollection that there was a problem with finding unmovable pages in MIGRATE_CMA regions. This might have been part of the problem. -- Mel Gorman SUSE Labs -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html