|
@@ -1430,13 +1430,6 @@ static void get_scan_ratio(struct zone *zone, struct scan_control *sc,
|
|
unsigned long ap, fp;
|
|
unsigned long ap, fp;
|
|
struct zone_reclaim_stat *reclaim_stat = get_reclaim_stat(zone, sc);
|
|
struct zone_reclaim_stat *reclaim_stat = get_reclaim_stat(zone, sc);
|
|
|
|
|
|
- /* If we have no swap space, do not bother scanning anon pages. */
|
|
|
|
- if (!sc->may_swap || (nr_swap_pages <= 0)) {
|
|
|
|
- percent[0] = 0;
|
|
|
|
- percent[1] = 100;
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
anon = zone_nr_pages(zone, sc, LRU_ACTIVE_ANON) +
|
|
anon = zone_nr_pages(zone, sc, LRU_ACTIVE_ANON) +
|
|
zone_nr_pages(zone, sc, LRU_INACTIVE_ANON);
|
|
zone_nr_pages(zone, sc, LRU_INACTIVE_ANON);
|
|
file = zone_nr_pages(zone, sc, LRU_ACTIVE_FILE) +
|
|
file = zone_nr_pages(zone, sc, LRU_ACTIVE_FILE) +
|
|
@@ -1534,15 +1527,22 @@ static void shrink_zone(int priority, struct zone *zone,
|
|
enum lru_list l;
|
|
enum lru_list l;
|
|
unsigned long nr_reclaimed = sc->nr_reclaimed;
|
|
unsigned long nr_reclaimed = sc->nr_reclaimed;
|
|
unsigned long swap_cluster_max = sc->swap_cluster_max;
|
|
unsigned long swap_cluster_max = sc->swap_cluster_max;
|
|
|
|
+ int noswap = 0;
|
|
|
|
|
|
- get_scan_ratio(zone, sc, percent);
|
|
|
|
|
|
+ /* If we have no swap space, do not bother scanning anon pages. */
|
|
|
|
+ if (!sc->may_swap || (nr_swap_pages <= 0)) {
|
|
|
|
+ noswap = 1;
|
|
|
|
+ percent[0] = 0;
|
|
|
|
+ percent[1] = 100;
|
|
|
|
+ } else
|
|
|
|
+ get_scan_ratio(zone, sc, percent);
|
|
|
|
|
|
for_each_evictable_lru(l) {
|
|
for_each_evictable_lru(l) {
|
|
int file = is_file_lru(l);
|
|
int file = is_file_lru(l);
|
|
unsigned long scan;
|
|
unsigned long scan;
|
|
|
|
|
|
scan = zone_nr_pages(zone, sc, l);
|
|
scan = zone_nr_pages(zone, sc, l);
|
|
- if (priority) {
|
|
|
|
|
|
+ if (priority || noswap) {
|
|
scan >>= priority;
|
|
scan >>= priority;
|
|
scan = (scan * percent[file]) / 100;
|
|
scan = (scan * percent[file]) / 100;
|
|
}
|
|
}
|