diff options
Diffstat (limited to 'mm/vmscan.c')
| -rw-r--r-- | mm/vmscan.c | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c index 79c809895fba..3ff3311447f5 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | 13 | ||
| 14 | #include <linux/mm.h> | 14 | #include <linux/mm.h> |
| 15 | #include <linux/module.h> | 15 | #include <linux/module.h> |
| 16 | #include <linux/slab.h> | 16 | #include <linux/gfp.h> |
| 17 | #include <linux/kernel_stat.h> | 17 | #include <linux/kernel_stat.h> |
| 18 | #include <linux/swap.h> | 18 | #include <linux/swap.h> |
| 19 | #include <linux/pagemap.h> | 19 | #include <linux/pagemap.h> |
| @@ -1535,13 +1535,6 @@ static void get_scan_ratio(struct zone *zone, struct scan_control *sc, | |||
| 1535 | unsigned long ap, fp; | 1535 | unsigned long ap, fp; |
| 1536 | struct zone_reclaim_stat *reclaim_stat = get_reclaim_stat(zone, sc); | 1536 | struct zone_reclaim_stat *reclaim_stat = get_reclaim_stat(zone, sc); |
| 1537 | 1537 | ||
| 1538 | /* If we have no swap space, do not bother scanning anon pages. */ | ||
| 1539 | if (!sc->may_swap || (nr_swap_pages <= 0)) { | ||
| 1540 | percent[0] = 0; | ||
| 1541 | percent[1] = 100; | ||
| 1542 | return; | ||
| 1543 | } | ||
| 1544 | |||
| 1545 | anon = zone_nr_lru_pages(zone, sc, LRU_ACTIVE_ANON) + | 1538 | anon = zone_nr_lru_pages(zone, sc, LRU_ACTIVE_ANON) + |
| 1546 | zone_nr_lru_pages(zone, sc, LRU_INACTIVE_ANON); | 1539 | zone_nr_lru_pages(zone, sc, LRU_INACTIVE_ANON); |
| 1547 | file = zone_nr_lru_pages(zone, sc, LRU_ACTIVE_FILE) + | 1540 | file = zone_nr_lru_pages(zone, sc, LRU_ACTIVE_FILE) + |
| @@ -1639,20 +1632,22 @@ static void shrink_zone(int priority, struct zone *zone, | |||
| 1639 | unsigned long nr_reclaimed = sc->nr_reclaimed; | 1632 | unsigned long nr_reclaimed = sc->nr_reclaimed; |
| 1640 | unsigned long nr_to_reclaim = sc->nr_to_reclaim; | 1633 | unsigned long nr_to_reclaim = sc->nr_to_reclaim; |
| 1641 | struct zone_reclaim_stat *reclaim_stat = get_reclaim_stat(zone, sc); | 1634 | struct zone_reclaim_stat *reclaim_stat = get_reclaim_stat(zone, sc); |
| 1635 | int noswap = 0; | ||
| 1642 | 1636 | ||
| 1643 | get_scan_ratio(zone, sc, percent); | 1637 | /* If we have no swap space, do not bother scanning anon pages. */ |
| 1638 | if (!sc->may_swap || (nr_swap_pages <= 0)) { | ||
| 1639 | noswap = 1; | ||
| 1640 | percent[0] = 0; | ||
| 1641 | percent[1] = 100; | ||
| 1642 | } else | ||
| 1643 | get_scan_ratio(zone, sc, percent); | ||
| 1644 | 1644 | ||
| 1645 | for_each_evictable_lru(l) { | 1645 | for_each_evictable_lru(l) { |
| 1646 | int file = is_file_lru(l); | 1646 | int file = is_file_lru(l); |
| 1647 | unsigned long scan; | 1647 | unsigned long scan; |
| 1648 | 1648 | ||
| 1649 | if (percent[file] == 0) { | ||
| 1650 | nr[l] = 0; | ||
| 1651 | continue; | ||
| 1652 | } | ||
| 1653 | |||
| 1654 | scan = zone_nr_lru_pages(zone, sc, l); | 1649 | scan = zone_nr_lru_pages(zone, sc, l); |
| 1655 | if (priority) { | 1650 | if (priority || noswap) { |
| 1656 | scan >>= priority; | 1651 | scan >>= priority; |
| 1657 | scan = (scan * percent[file]) / 100; | 1652 | scan = (scan * percent[file]) / 100; |
| 1658 | } | 1653 | } |
