On Fri, Oct 07, 2016 at 02:45:34PM +0900, Minchan Kim wrote: > There is race between page freeing and unreserved highatomic. > > CPU 0 CPU 1 > > free_hot_cold_page > mt = get_pfnblock_migratetype > set_pcppage_migratetype(page, mt) > unreserve_highatomic_pageblock > spin_lock_irqsave(&zone->lock) > move_freepages_block > set_pageblock_migratetype(page) > spin_unlock_irqrestore(&zone->lock) > free_pcppages_bulk > __free_one_page(mt) <- mt is stale > > By above race, a page on CPU 0 could go non-highorderatomic free list > since the pageblock's type is changed. By that, unreserve logic of > highorderatomic can decrease reserved count on a same pageblock > several times and then it will make mismatch between > nr_reserved_highatomic and the number of reserved pageblock. > > So, this patch verifies whether the pageblock is highatomic or not > and decrease the count only if the pageblock is highatomic. > > Signed-off-by: Minchan Kim <minc...@kernel.org>
Acked-by: Mel Gorman <mgor...@techsingularity.net> -- Mel Gorman SUSE Labs