aboutsummaryrefslogtreecommitdiffstats
path: root/mm/vmscan.c
diff options
context:
space:
mode:
authorKOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>2010-03-05 16:41:47 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2010-03-06 14:26:24 -0500
commit84b18490d1f1bc7ed5095c929f78bc002eb70f26 (patch)
tree2543443925b2852436979d4bdf18d916a6b5c11e /mm/vmscan.c
parent45973d74fd3b1e3e16c025b688a725c7653b1443 (diff)
vmscan: get_scan_ratio() cleanup
The get_scan_ratio() should have all scan-ratio related calculations. Thus, this patch move some calculation into get_scan_ratio. Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Reviewed-by: Rik van Riel <riel@redhat.com> Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Reviewed-by: Minchan Kim <minchan.kim@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/vmscan.c')
-rw-r--r--mm/vmscan.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 96ebe6608d5c..62782057fcb9 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -1501,6 +1501,13 @@ static void get_scan_ratio(struct zone *zone, struct scan_control *sc,
1501 unsigned long ap, fp; 1501 unsigned long ap, fp;
1502 struct zone_reclaim_stat *reclaim_stat = get_reclaim_stat(zone, sc); 1502 struct zone_reclaim_stat *reclaim_stat = get_reclaim_stat(zone, sc);
1503 1503
1504 /* If we have no swap space, do not bother scanning anon pages. */
1505 if (!sc->may_swap || (nr_swap_pages <= 0)) {
1506 percent[0] = 0;
1507 percent[1] = 100;
1508 return;
1509 }
1510
1504 anon = zone_nr_lru_pages(zone, sc, LRU_ACTIVE_ANON) + 1511 anon = zone_nr_lru_pages(zone, sc, LRU_ACTIVE_ANON) +
1505 zone_nr_lru_pages(zone, sc, LRU_INACTIVE_ANON); 1512 zone_nr_lru_pages(zone, sc, LRU_INACTIVE_ANON);
1506 file = zone_nr_lru_pages(zone, sc, LRU_ACTIVE_FILE) + 1513 file = zone_nr_lru_pages(zone, sc, LRU_ACTIVE_FILE) +
@@ -1598,22 +1605,20 @@ static void shrink_zone(int priority, struct zone *zone,
1598 unsigned long nr_reclaimed = sc->nr_reclaimed; 1605 unsigned long nr_reclaimed = sc->nr_reclaimed;
1599 unsigned long nr_to_reclaim = sc->nr_to_reclaim; 1606 unsigned long nr_to_reclaim = sc->nr_to_reclaim;
1600 struct zone_reclaim_stat *reclaim_stat = get_reclaim_stat(zone, sc); 1607 struct zone_reclaim_stat *reclaim_stat = get_reclaim_stat(zone, sc);
1601 int noswap = 0;
1602 1608
1603 /* If we have no swap space, do not bother scanning anon pages. */ 1609 get_scan_ratio(zone, sc, percent);
1604 if (!sc->may_swap || (nr_swap_pages <= 0)) {
1605 noswap = 1;
1606 percent[0] = 0;
1607 percent[1] = 100;
1608 } else
1609 get_scan_ratio(zone, sc, percent);
1610 1610
1611 for_each_evictable_lru(l) { 1611 for_each_evictable_lru(l) {
1612 int file = is_file_lru(l); 1612 int file = is_file_lru(l);
1613 unsigned long scan; 1613 unsigned long scan;
1614 1614
1615 if (percent[file] == 0) {
1616 nr[l] = 0;
1617 continue;
1618 }
1619
1615 scan = zone_nr_lru_pages(zone, sc, l); 1620 scan = zone_nr_lru_pages(zone, sc, l);
1616 if (priority || noswap) { 1621 if (priority) {
1617 scan >>= priority; 1622 scan >>= priority;
1618 scan = (scan * percent[file]) / 100; 1623 scan = (scan * percent[file]) / 100;
1619 } 1624 }