|
@@ -1930,11 +1930,6 @@ static void get_scan_count(struct lruvec *lruvec, int swappiness,
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
- anon = get_lru_size(lruvec, LRU_ACTIVE_ANON) +
|
|
|
- get_lru_size(lruvec, LRU_INACTIVE_ANON);
|
|
|
- file = get_lru_size(lruvec, LRU_ACTIVE_FILE) +
|
|
|
- get_lru_size(lruvec, LRU_INACTIVE_FILE);
|
|
|
-
|
|
|
/*
|
|
|
* Prevent the reclaimer from falling into the cache trap: as
|
|
|
* cache pages start out inactive, every cache fault will tip
|
|
@@ -1945,9 +1940,14 @@ static void get_scan_count(struct lruvec *lruvec, int swappiness,
|
|
|
* anon pages. Try to detect this based on file LRU size.
|
|
|
*/
|
|
|
if (global_reclaim(sc)) {
|
|
|
- unsigned long free = zone_page_state(zone, NR_FREE_PAGES);
|
|
|
+ unsigned long zonefile;
|
|
|
+ unsigned long zonefree;
|
|
|
+
|
|
|
+ zonefree = zone_page_state(zone, NR_FREE_PAGES);
|
|
|
+ zonefile = zone_page_state(zone, NR_ACTIVE_FILE) +
|
|
|
+ zone_page_state(zone, NR_INACTIVE_FILE);
|
|
|
|
|
|
- if (unlikely(file + free <= high_wmark_pages(zone))) {
|
|
|
+ if (unlikely(zonefile + zonefree <= high_wmark_pages(zone))) {
|
|
|
scan_balance = SCAN_ANON;
|
|
|
goto out;
|
|
|
}
|
|
@@ -1982,6 +1982,12 @@ static void get_scan_count(struct lruvec *lruvec, int swappiness,
|
|
|
*
|
|
|
* anon in [0], file in [1]
|
|
|
*/
|
|
|
+
|
|
|
+ anon = get_lru_size(lruvec, LRU_ACTIVE_ANON) +
|
|
|
+ get_lru_size(lruvec, LRU_INACTIVE_ANON);
|
|
|
+ file = get_lru_size(lruvec, LRU_ACTIVE_FILE) +
|
|
|
+ get_lru_size(lruvec, LRU_INACTIVE_FILE);
|
|
|
+
|
|
|
spin_lock_irq(&zone->lru_lock);
|
|
|
if (unlikely(reclaim_stat->recent_scanned[0] > anon / 4)) {
|
|
|
reclaim_stat->recent_scanned[0] /= 2;
|