To prevent races, set_pageblock_migratetype() should be called with zone->lock held. This patch adds a debugging assertion and introduces a _nolock variant for zone init functions. Signed-off-by: Vlastimil Babka <vbabka@xxxxxxx> --- mm/page_alloc.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index de5b419..fd6a64c 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -232,7 +232,7 @@ EXPORT_SYMBOL(nr_online_nodes); int page_group_by_mobility_disabled __read_mostly; -void set_pageblock_migratetype(struct page *page, int migratetype) +static void set_pageblock_migratetype_nolock(struct page *page, int migratetype) { if (unlikely(page_group_by_mobility_disabled && migratetype < MIGRATE_PCPTYPES)) @@ -242,6 +242,13 @@ void set_pageblock_migratetype(struct page *page, int migratetype) PB_migrate, PB_migrate_end); } +void set_pageblock_migratetype(struct page *page, int migratetype) +{ + VM_BUG_ON(!spin_is_locked(&page_zone(page)->lock)); + + set_pageblock_migratetype_nolock(page, migratetype); +} + bool oom_killer_disabled __read_mostly; #ifdef CONFIG_DEBUG_VM @@ -803,7 +810,7 @@ void __init init_cma_reserved_pageblock(struct page *page) } while (++p, --i); set_page_refcounted(page); - set_pageblock_migratetype(page, MIGRATE_CMA); + set_pageblock_migratetype_nolock(page, MIGRATE_CMA); __free_pages(page, pageblock_order); adjust_managed_page_count(page, pageblock_nr_pages); } @@ -4100,7 +4107,7 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone, if ((z->zone_start_pfn <= pfn) && (pfn < zone_end_pfn(z)) && !(pfn & (pageblock_nr_pages - 1))) - set_pageblock_migratetype(page, MIGRATE_MOVABLE); + set_pageblock_migratetype_nolock(page, MIGRATE_MOVABLE); INIT_LIST_HEAD(&page->lru); #ifdef WANT_PAGE_VIRTUAL -- 1.8.4.5 -- 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>