/* MIGRATE_MOVABLE list may include MIGRATE_RESERVEs */
                        __free_one_page(page, zone, 0, mt);
                        trace_mm_page_pcpu_drain(page, 0, mt);
-                       if (is_migrate_cma(mt))
-                               __mod_zone_page_state(zone, NR_FREE_CMA_PAGES, 1);
+                       if (likely(get_pageblock_migratetype(page) != MIGRATE_ISOLATE)) {
+                               __mod_zone_page_state(zone, NR_FREE_PAGES, 1);
+                               if (is_migrate_cma(mt))
+                                       __mod_zone_page_state(zone, NR_FREE_CMA_PAGES, 1);
+                       }
                } while (--to_free && --batch_free && !list_empty(list));
        }
-       __mod_zone_page_state(zone, NR_FREE_PAGES, count);
        spin_unlock(&zone->lock);
 }
 
                list_del(&page->lru);
                rmv_page_order(page);
                zone->free_area[order].nr_free--;
-               __mod_zone_page_state(zone, NR_FREE_PAGES,
-                                     - (1UL << order));
                for (i = 0; i < (1 << order); i++)
                        SetPageReserved((page+i));
                pfn += (1 << order);