diff options
author | KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> | 2010-03-05 16:41:47 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-03-06 14:26:24 -0500 |
commit | 84b18490d1f1bc7ed5095c929f78bc002eb70f26 (patch) | |
tree | 2543443925b2852436979d4bdf18d916a6b5c11e /mm/vmscan.c | |
parent | 45973d74fd3b1e3e16c025b688a725c7653b1443 (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.c | 23 |
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 | } |