On 04/12/2016 09:18 AM, Hugh Dickins wrote: > 3. /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, and isolate_migratepages_range() can always do the acct > itself, leaving migratepages putback to caller like most other places. Sigh, looks like I notoriously suck at the nr_isolated_* accounting. The isolate_migratepages_range() is also due to my 3.18 commit. Back then, Joonsoo caught the problem for compaction side, but CMA issue remains. Sorry and thanks. ----8<---- >From 8aa6e765d4f931718386e13290d43348e34f0e76 Mon Sep 17 00:00:00 2001 From: Hugh Dickins <hughd@xxxxxxxxxx> Date: Tue, 12 Apr 2016 11:14:49 +0200 Subject: [PATCH] mm, cma: prevent nr_isolated_* counters 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. The bug in compaction was due to a recent mmotm patch, but much older instance of the bug was also noticed in isolate_migratepages_range() which is used for CMA and gigantic hugepage allocations. The bug is caused by putback_movable_pages() in an error path decrementing the isolated counters without them being previously incremented by acct_isolated(). Fix isolate_migratepages_range() by removing the error-path putback, thus reaching acct_isolated() with migratepages still isolated, and leaving putback to caller like most other places do. [vbabka@xxxxxxx: expanded the changelog] Fixes: edc2ca612496 ("mm, compaction: move pageblock checks up from isolate_migratepages_range()") Cc: stable@xxxxxxxxxxxxxxx #3.18+ Cc: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx> Signed-off-by: Hugh Dickins <hughd@xxxxxxxxxx> Signed-off-by: Vlastimil Babka <vbabka@xxxxxxx> --- mm/compaction.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/mm/compaction.c b/mm/compaction.c index ab649fba3d88..c0be38f634d3 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -930,16 +930,8 @@ isolate_migratepages_range(struct compact_control *cc, unsigned long start_pfn, pfn = isolate_migratepages_block(cc, pfn, block_end_pfn, ISOLATE_UNEVICTABLE); - /* - * In case of fatal failure, release everything that might - * have been isolated in the previous iteration, and signal - * the failure back to caller. - */ - if (!pfn) { - putback_movable_pages(&cc->migratepages); - cc->nr_migratepages = 0; + if (!pfn) break; - } if (cc->nr_migratepages == COMPACT_CLUSTER_MAX) break; -- 2.8.1 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>