if (blockpfn == end_pfn)
                update_pageblock_skip(cc, valid_page, total_isolated, false);
 
-       count_compact_events(COMPACTFREE_SCANNED, nr_scanned);
+       cc->total_free_scanned += nr_scanned;
        if (total_isolated)
                count_compact_events(COMPACTISOLATED, total_isolated);
        return total_isolated;
        trace_mm_compaction_isolate_migratepages(start_pfn, low_pfn,
                                                nr_scanned, nr_isolated);
 
-       count_compact_events(COMPACTMIGRATE_SCANNED, nr_scanned);
+       cc->total_migrate_scanned += nr_scanned;
        if (nr_isolated)
                count_compact_events(COMPACTISOLATED, nr_isolated);
 
                        zone->compact_cached_free_pfn = free_pfn;
        }
 
+       count_compact_events(COMPACTMIGRATE_SCANNED, cc->total_migrate_scanned);
+       count_compact_events(COMPACTFREE_SCANNED, cc->total_free_scanned);
+
        trace_mm_compaction_end(start_pfn, cc->migrate_pfn,
                                cc->free_pfn, end_pfn, sync, ret);
 
        struct compact_control cc = {
                .nr_freepages = 0,
                .nr_migratepages = 0,
+               .total_migrate_scanned = 0,
+               .total_free_scanned = 0,
                .order = order,
                .gfp_mask = gfp_mask,
                .zone = zone,
        struct zone *zone;
        struct compact_control cc = {
                .order = -1,
+               .total_migrate_scanned = 0,
+               .total_free_scanned = 0,
                .mode = MIGRATE_SYNC,
                .ignore_skip_hint = true,
                .whole_zone = true,
        struct zone *zone;
        struct compact_control cc = {
                .order = pgdat->kcompactd_max_order,
+               .total_migrate_scanned = 0,
+               .total_free_scanned = 0,
                .classzone_idx = pgdat->kcompactd_classzone_idx,
                .mode = MIGRATE_SYNC_LIGHT,
                .ignore_skip_hint = true,
        };
        trace_mm_compaction_kcompactd_wake(pgdat->node_id, cc.order,
                                                        cc.classzone_idx);
-       count_vm_event(KCOMPACTD_WAKE);
+       count_compact_event(KCOMPACTD_WAKE);
 
        for (zoneid = 0; zoneid <= cc.classzone_idx; zoneid++) {
                int status;
 
                cc.nr_freepages = 0;
                cc.nr_migratepages = 0;
+               cc.total_migrate_scanned = 0;
+               cc.total_free_scanned = 0;
                cc.zone = zone;
                INIT_LIST_HEAD(&cc.freepages);
                INIT_LIST_HEAD(&cc.migratepages);
                        defer_compaction(zone, cc.order);
                }
 
+               count_compact_events(KCOMPACTD_MIGRATE_SCANNED,
+                                    cc.total_migrate_scanned);
+               count_compact_events(KCOMPACTD_FREE_SCANNED,
+                                    cc.total_free_scanned);
+
                VM_BUG_ON(!list_empty(&cc.freepages));
                VM_BUG_ON(!list_empty(&cc.migratepages));
        }