Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a0901266 authored by Mel Gorman's avatar Mel Gorman Committed by Vinayak Menon
Browse files

mm: vmscan: do not continue scanning if reclaim was aborted for compaction



Direct reclaim is not aborting to allow compaction to go ahead properly.
do_try_to_free_pages is told to abort reclaim which is happily ignores
and instead increases priority instead until it reaches 0 and starts
shrinking file/anon equally.  This patch corrects the situation by
aborting reclaim when requested instead of raising priority.

Signed-off-by: default avatarMel Gorman <mgorman@suse.de>
Cc: Rik van Riel <riel@redhat.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Michal Hocko <mhocko@suse.cz>
Cc: Dave Chinner <david@fromorbit.com>
Cc: Kamezawa Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Git-commit: 5a1c9cbc1550f93335d7c03eb6c271e642deff04
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git


Change-Id: I1e3fc6b2fea5d5a06edf5c682caffa3a7907a7ad
[vinmenon@codeaurora.org: resolve trivial merge conflicts]
Signed-off-by: default avatarVinayak Menon <vinmenon@codeaurora.org>
parent 0c085006
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -2447,8 +2447,10 @@ static unsigned long do_try_to_free_pages(struct zonelist *zonelist,
		aborted_reclaim = shrink_zones(zonelist, sc);

		/*
		 * Don't shrink slabs when reclaiming memory from
		 * over limit cgroups
		 * Don't shrink slabs when reclaiming memory from over limit
		 * cgroups but do shrink slab at least once when aborting
		 * reclaim for compaction to avoid unevenly scanning file/anon
		 * LRU pages over slab pages.
		 */
		if (global_reclaim(sc)) {
			unsigned long lru_pages = 0;
@@ -2490,7 +2492,7 @@ static unsigned long do_try_to_free_pages(struct zonelist *zonelist,
						WB_REASON_TRY_TO_FREE_PAGES);
			sc->may_writepage = 1;
		}
	} while (--sc->priority >= 0);
	} while (--sc->priority >= 0 && !aborted_reclaim);

out:
	delayacct_freepages_end();