|
@@ -2043,10 +2043,16 @@ 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 (!inactive_file_is_low(lruvec)) {
|
|
|
|
|
|
+ if (!inactive_file_is_low(lruvec) &&
|
|
|
|
+ get_lru_size(lruvec, LRU_INACTIVE_FILE) >> sc->priority) {
|
|
scan_balance = SCAN_FILE;
|
|
scan_balance = SCAN_FILE;
|
|
goto out;
|
|
goto out;
|
|
}
|
|
}
|