diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 61806367d580..352791ca8d91 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -2343,7 +2343,9 @@ static struct page *rmqueue_no_cma(struct zone *zone, unsigned int order, if (!page) page = __rmqueue_fallback(zone, order, migratetype); WARN_ON(page && is_migrate_cma(get_pcppage_migratetype(page))); - __mod_zone_page_state(zone, NR_FREE_PAGES, -(1 << order)); + if (page) + __mod_zone_page_state(zone, NR_FREE_PAGES, -(1 << order)); + spin_unlock(&zone->lock); return page; }