diff for duplicates of <570CB9CE.1070408@suse.cz> diff --git a/a/1.txt b/N1/1.txt index a931e53..8ea297b 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -20,3 +20,59 @@ This is a -fix for: mm-compaction-skip-blocks-where-isolation-fails-in-async-direct-compaction.patch ----8<---- +>From 59a0075b6cf85045aa2dc5cee1f27797bcd0b3d2 Mon Sep 17 00:00:00 2001 +From: Hugh Dickins <hughd@google.com> +Date: Tue, 12 Apr 2016 10:51:20 +0200 +Subject: [PATCH] mm, compaction: prevent nr_isolated_* from going negative + +/proc/sys/vm/stat_refresh warns nr_isolated_anon and nr_isolated_file +go increasingly negative under compaction: which would add delay when +should be none, or no delay when should delay. putback_movable_pages() +decrements the NR_ISOLATED counts which acct_isolated() increments, +so isolate_migratepages_block() needs to acct before putback in that +special case. It's also useful to reset cc->nr_migratepages after putback +so we don't needlessly return too early on the COMPACT_CLUSTER_MAX check. + +Also it's easier to track the life of cc->migratepages if we don't assign +it to a migratelist variable. +--- + mm/compaction.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/mm/compaction.c b/mm/compaction.c +index 67f886ecd773..ab649fba3d88 100644 +--- a/mm/compaction.c ++++ b/mm/compaction.c +@@ -638,7 +638,6 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn, + { + struct zone *zone = cc->zone; + unsigned long nr_scanned = 0, nr_isolated = 0; +- struct list_head *migratelist = &cc->migratepages; + struct lruvec *lruvec; + unsigned long flags = 0; + bool locked = false; +@@ -817,7 +816,7 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn, + del_page_from_lru_list(page, lruvec, page_lru(page)); + + isolate_success: +- list_add(&page->lru, migratelist); ++ list_add(&page->lru, &cc->migratepages); + cc->nr_migratepages++; + nr_isolated++; + +@@ -851,9 +850,11 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn, + spin_unlock_irqrestore(&zone->lru_lock, flags); + locked = false; + } +- putback_movable_pages(migratelist); +- nr_isolated = 0; ++ acct_isolated(zone, cc); ++ putback_movable_pages(&cc->migratepages); ++ cc->nr_migratepages = 0; + cc->last_migrated_pfn = 0; ++ nr_isolated = 0; + } + + if (low_pfn < next_skip_pfn) { +-- +2.8.1 diff --git a/a/content_digest b/N1/content_digest index 91ec153..972f0ec 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -31,6 +31,62 @@ "This is a -fix for:\n" "mm-compaction-skip-blocks-where-isolation-fails-in-async-direct-compaction.patch\n" "\n" - ----8<---- + "----8<----\n" + ">From 59a0075b6cf85045aa2dc5cee1f27797bcd0b3d2 Mon Sep 17 00:00:00 2001\n" + "From: Hugh Dickins <hughd@google.com>\n" + "Date: Tue, 12 Apr 2016 10:51:20 +0200\n" + "Subject: [PATCH] mm, compaction: prevent nr_isolated_* from going negative\n" + "\n" + "/proc/sys/vm/stat_refresh warns nr_isolated_anon and nr_isolated_file\n" + "go increasingly negative under compaction: which would add delay when\n" + "should be none, or no delay when should delay. putback_movable_pages()\n" + "decrements the NR_ISOLATED counts which acct_isolated() increments,\n" + "so isolate_migratepages_block() needs to acct before putback in that\n" + "special case. It's also useful to reset cc->nr_migratepages after putback\n" + "so we don't needlessly return too early on the COMPACT_CLUSTER_MAX check.\n" + "\n" + "Also it's easier to track the life of cc->migratepages if we don't assign\n" + "it to a migratelist variable.\n" + "---\n" + " mm/compaction.c | 9 +++++----\n" + " 1 file changed, 5 insertions(+), 4 deletions(-)\n" + "\n" + "diff --git a/mm/compaction.c b/mm/compaction.c\n" + "index 67f886ecd773..ab649fba3d88 100644\n" + "--- a/mm/compaction.c\n" + "+++ b/mm/compaction.c\n" + "@@ -638,7 +638,6 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn,\n" + " {\n" + " \tstruct zone *zone = cc->zone;\n" + " \tunsigned long nr_scanned = 0, nr_isolated = 0;\n" + "-\tstruct list_head *migratelist = &cc->migratepages;\n" + " \tstruct lruvec *lruvec;\n" + " \tunsigned long flags = 0;\n" + " \tbool locked = false;\n" + "@@ -817,7 +816,7 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn,\n" + " \t\tdel_page_from_lru_list(page, lruvec, page_lru(page));\n" + " \n" + " isolate_success:\n" + "-\t\tlist_add(&page->lru, migratelist);\n" + "+\t\tlist_add(&page->lru, &cc->migratepages);\n" + " \t\tcc->nr_migratepages++;\n" + " \t\tnr_isolated++;\n" + " \n" + "@@ -851,9 +850,11 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn,\n" + " \t\t\t\tspin_unlock_irqrestore(&zone->lru_lock,\tflags);\n" + " \t\t\t\tlocked = false;\n" + " \t\t\t}\n" + "-\t\t\tputback_movable_pages(migratelist);\n" + "-\t\t\tnr_isolated = 0;\n" + "+\t\t\tacct_isolated(zone, cc);\n" + "+\t\t\tputback_movable_pages(&cc->migratepages);\n" + "+\t\t\tcc->nr_migratepages = 0;\n" + " \t\t\tcc->last_migrated_pfn = 0;\n" + "+\t\t\tnr_isolated = 0;\n" + " \t\t}\n" + " \n" + " \t\tif (low_pfn < next_skip_pfn) {\n" + "-- \n" + 2.8.1 -25e96ff1b545edd909b4464303b56fe447e945084d46b25ce3527bea194bf334 +92b6a1bc3d1b09db81dc4e8e9de1175b4b2bd20b874bd4e9b24ac1649580f6b6
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.