From: Hugh Dickins Date: Thu, 28 Jul 2016 22:48:41 +0000 (-0700) Subject: mm, compaction: don't isolate PageWriteback pages in MIGRATE_SYNC_LIGHT mode X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=1d2047fefa20e49072f6a37a7f71544e8cace529;p=GitHub%2Fmoto-9609%2Fandroid_kernel_motorola_exynos9610.git mm, compaction: don't isolate PageWriteback pages in MIGRATE_SYNC_LIGHT mode At present MIGRATE_SYNC_LIGHT is allowing __isolate_lru_page() to isolate a PageWriteback page, which __unmap_and_move() then rejects with -EBUSY: of course the writeback might complete in between, but that's not what we usually expect, so probably better not to isolate it. When tested by stress-highalloc from mmtests, this has reduced the number of page migrate failures by 60-70%. Link: http://lkml.kernel.org/r/20160721073614.24395-2-vbabka@suse.cz Signed-off-by: Hugh Dickins Signed-off-by: Vlastimil Babka Acked-by: Michal Hocko Acked-by: Mel Gorman Acked-by: David Rientjes Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/mm/compaction.c b/mm/compaction.c index e5995f38d677..fee1118c8b94 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -1200,7 +1200,7 @@ static isolate_migrate_t isolate_migratepages(struct zone *zone, struct page *page; const isolate_mode_t isolate_mode = (sysctl_compact_unevictable_allowed ? ISOLATE_UNEVICTABLE : 0) | - (cc->mode == MIGRATE_ASYNC ? ISOLATE_ASYNC_MIGRATE : 0); + (cc->mode != MIGRATE_SYNC ? ISOLATE_ASYNC_MIGRATE : 0); /* * Start at where we last stopped, or beginning of the zone as