From b725e258020735d8fbd1c1c18407a7eb5766611a Mon Sep 17 00:00:00 2001 From: Yang Shi Date: Sat, 4 Apr 2020 07:31:04 +0800 Subject: [PATCH 0913/2944] alinux: Revert "mm/compaction.c: clear total_{migrate,free}_scanned before scanning a new zone" to #26255339 This reverts commit 4d8bdf7f3a869e076aa8496a8ed95b81bbca54ee. The commit was backported from v5.4 to stable tree, but it breaks the context depended by backporting compaction optimization made in v5.1. So revert this commit for now, the commit will be re-applied after the compaction optimization series. Signed-off-by: Yang Shi Reviewed-by: Xunlei Pang --- mm/compaction.c | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/mm/compaction.c b/mm/compaction.c index 0057cc6..44adbfa 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -1541,17 +1541,6 @@ static enum compact_result compact_zone(struct zone *zone, struct compact_contro unsigned long end_pfn = zone_end_pfn(zone); const bool sync = cc->mode != MIGRATE_ASYNC; - /* - * These counters track activities during zone compaction. Initialize - * them before compacting a new zone. - */ - cc->total_migrate_scanned = 0; - cc->total_free_scanned = 0; - cc->nr_migratepages = 0; - cc->nr_freepages = 0; - INIT_LIST_HEAD(&cc->freepages); - INIT_LIST_HEAD(&cc->migratepages); - cc->migratetype = gfpflags_to_migratetype(cc->gfp_mask); ret = compaction_suitable(zone, cc->order, cc->alloc_flags, cc->classzone_idx); @@ -1715,6 +1704,10 @@ static enum compact_result compact_zone_order(struct zone *zone, int order, { enum compact_result 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, @@ -1727,6 +1720,8 @@ static enum compact_result compact_zone_order(struct zone *zone, int order, .ignore_skip_hint = (prio == MIN_COMPACT_PRIORITY), .ignore_block_suitable = (prio == MIN_COMPACT_PRIORITY) }; + INIT_LIST_HEAD(&cc.freepages); + INIT_LIST_HEAD(&cc.migratepages); ret = compact_zone(zone, &cc); @@ -1825,6 +1820,8 @@ static void compact_node(int nid) 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, @@ -1838,7 +1835,11 @@ static void compact_node(int nid) if (!populated_zone(zone)) continue; + cc.nr_freepages = 0; + cc.nr_migratepages = 0; cc.zone = zone; + INIT_LIST_HEAD(&cc.freepages); + INIT_LIST_HEAD(&cc.migratepages); compact_zone(zone, &cc); @@ -1947,6 +1948,8 @@ static void kcompactd_do_work(pg_data_t *pgdat) 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 = false, @@ -1970,10 +1973,16 @@ static void kcompactd_do_work(pg_data_t *pgdat) COMPACT_CONTINUE) continue; + 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); + if (kthread_should_stop()) return; - - cc.zone = zone; status = compact_zone(zone, &cc); if (status == COMPACT_SUCCESS) { -- 1.8.3.1