All of lore.kernel.org
 help / color / mirror / Atom feed
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.