From 42eb74ef07efda1aaf6b4bce3a6993b01e65a871 Mon Sep 17 00:00:00 2001 From: KOSAKI Motohiro Date: Tue, 6 Apr 2010 14:34:56 -0700 Subject: [PATCH] --- yaml --- r: 189567 b: refs/heads/master c: d6da1a5abc2bf3a06a5bda08e0f6833409234666 h: refs/heads/master i: 189565: 9d0516db75057ea13339eda2edb5d0c4ac8e302e 189563: ef42fdc9ff4dbe7f3583b06f8a51a8b45680d04e 189559: ec818d5b0e273212e082f87ac9949fcaee13cddb 189551: 7cd23ed42bf8b6ea297d2e18b99195487ed80325 189535: 4f242c7ba984139b0dc84ce988b582dcd52df00e 189503: fe48e1c8063b4ee4ee384a02fe5cca07c90d2fe5 189439: 0cbc7720731bb79fb60b9b8b5ddc7e7787ac988b v: v3 --- [refs] | 2 +- trunk/mm/vmscan.c | 23 +++++++++-------------- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/[refs] b/[refs] index dc99f7c8d1d9..102334c02482 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6e191f7bb083544dc4fa3879ff81caf97c65d197 +refs/heads/master: d6da1a5abc2bf3a06a5bda08e0f6833409234666 diff --git a/trunk/mm/vmscan.c b/trunk/mm/vmscan.c index e0e5f15bb726..3ff3311447f5 100644 --- a/trunk/mm/vmscan.c +++ b/trunk/mm/vmscan.c @@ -1535,13 +1535,6 @@ static void get_scan_ratio(struct zone *zone, struct scan_control *sc, unsigned long ap, fp; 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_lru_pages(zone, sc, LRU_ACTIVE_ANON) + zone_nr_lru_pages(zone, sc, LRU_INACTIVE_ANON); file = zone_nr_lru_pages(zone, sc, LRU_ACTIVE_FILE) + @@ -1639,20 +1632,22 @@ static void shrink_zone(int priority, struct zone *zone, unsigned long nr_reclaimed = sc->nr_reclaimed; unsigned long nr_to_reclaim = sc->nr_to_reclaim; struct zone_reclaim_stat *reclaim_stat = get_reclaim_stat(zone, sc); + 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) { int file = is_file_lru(l); unsigned long scan; - if (percent[file] == 0) { - nr[l] = 0; - continue; - } - scan = zone_nr_lru_pages(zone, sc, l); - if (priority) { + if (priority || noswap) { scan >>= priority; scan = (scan * percent[file]) / 100; }