summaryrefslogtreecommitdiff
path: root/mm/vmscan.c
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2018-06-02 01:13:34 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2018-06-02 01:13:34 -0700
commitfd95dadf54bf08e910a4cad0bbce8d25e8813429 (patch)
tree7824cada0e10c6bb934c59b3b8a3aeb09b1e812f /mm/vmscan.c
parent33b2567cd52c95ad3b33578aaa200d53aa4d4dbc (diff)
parent9848856fe15cdad6b64b5883bb4c30528b358f7d (diff)
Merge "Merge android-4.4.133 (3f51ea2) into msm-4.4"
Diffstat (limited to 'mm/vmscan.c')
-rw-r--r--mm/vmscan.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 67da9446135d..c7fe805048da 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2194,11 +2194,17 @@ static void get_scan_count(struct lruvec *lruvec, int swappiness,
}
/*
- * There is enough inactive page cache, do not reclaim
- * anything from the anonymous working set right now.
+ * If there is enough inactive page cache, i.e. if the size of the
+ * inactive list is greater than that of the active list *and* the
+ * inactive list actually has some pages to scan on this priority, we
+ * do not reclaim anything from the anonymous working set right now.
+ * Without the second condition we could end up never scanning an
+ * lruvec even if it has plenty of old anonymous pages unless the
+ * system is under heavy pressure.
*/
if (!IS_ENABLED(CONFIG_BALANCE_ANON_FILE_RECLAIM) &&
- !inactive_file_is_low(lruvec)) {
+ !inactive_file_is_low(lruvec) &&
+ get_lru_size(lruvec, LRU_INACTIVE_FILE) >> sc->priority) {
scan_balance = SCAN_FILE;
goto out;
}