diff options
Diffstat (limited to 'mm')
-rw-r--r-- | mm/memcontrol.c | 2 | ||||
-rw-r--r-- | mm/vmscan.c | 18 |
2 files changed, 9 insertions, 11 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index a500cb0594c4..9bf8a84bcaae 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -1550,7 +1550,7 @@ static unsigned long mem_cgroup_margin(struct mem_cgroup *memcg) | |||
1550 | int mem_cgroup_swappiness(struct mem_cgroup *memcg) | 1550 | int mem_cgroup_swappiness(struct mem_cgroup *memcg) |
1551 | { | 1551 | { |
1552 | /* root ? */ | 1552 | /* root ? */ |
1553 | if (!css_parent(&memcg->css)) | 1553 | if (mem_cgroup_disabled() || !css_parent(&memcg->css)) |
1554 | return vm_swappiness; | 1554 | return vm_swappiness; |
1555 | 1555 | ||
1556 | return memcg->swappiness; | 1556 | return memcg->swappiness; |
diff --git a/mm/vmscan.c b/mm/vmscan.c index 05d41c0d7f6c..f44476a41544 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c | |||
@@ -83,6 +83,9 @@ struct scan_control { | |||
83 | /* Scan (total_size >> priority) pages at once */ | 83 | /* Scan (total_size >> priority) pages at once */ |
84 | int priority; | 84 | int priority; |
85 | 85 | ||
86 | /* anon vs. file LRUs scanning "ratio" */ | ||
87 | int swappiness; | ||
88 | |||
86 | /* | 89 | /* |
87 | * The memory cgroup that hit its limit and as a result is the | 90 | * The memory cgroup that hit its limit and as a result is the |
88 | * primary target of this reclaim invocation. | 91 | * primary target of this reclaim invocation. |
@@ -1845,13 +1848,6 @@ static unsigned long shrink_list(enum lru_list lru, unsigned long nr_to_scan, | |||
1845 | return shrink_inactive_list(nr_to_scan, lruvec, sc, lru); | 1848 | return shrink_inactive_list(nr_to_scan, lruvec, sc, lru); |
1846 | } | 1849 | } |
1847 | 1850 | ||
1848 | static int vmscan_swappiness(struct scan_control *sc) | ||
1849 | { | ||
1850 | if (global_reclaim(sc)) | ||
1851 | return vm_swappiness; | ||
1852 | return mem_cgroup_swappiness(sc->target_mem_cgroup); | ||
1853 | } | ||
1854 | |||
1855 | enum scan_balance { | 1851 | enum scan_balance { |
1856 | SCAN_EQUAL, | 1852 | SCAN_EQUAL, |
1857 | SCAN_FRACT, | 1853 | SCAN_FRACT, |
@@ -1912,7 +1908,7 @@ static void get_scan_count(struct lruvec *lruvec, struct scan_control *sc, | |||
1912 | * using the memory controller's swap limit feature would be | 1908 | * using the memory controller's swap limit feature would be |
1913 | * too expensive. | 1909 | * too expensive. |
1914 | */ | 1910 | */ |
1915 | if (!global_reclaim(sc) && !vmscan_swappiness(sc)) { | 1911 | if (!global_reclaim(sc) && !sc->swappiness) { |
1916 | scan_balance = SCAN_FILE; | 1912 | scan_balance = SCAN_FILE; |
1917 | goto out; | 1913 | goto out; |
1918 | } | 1914 | } |
@@ -1922,7 +1918,7 @@ static void get_scan_count(struct lruvec *lruvec, struct scan_control *sc, | |||
1922 | * system is close to OOM, scan both anon and file equally | 1918 | * system is close to OOM, scan both anon and file equally |
1923 | * (unless the swappiness setting disagrees with swapping). | 1919 | * (unless the swappiness setting disagrees with swapping). |
1924 | */ | 1920 | */ |
1925 | if (!sc->priority && vmscan_swappiness(sc)) { | 1921 | if (!sc->priority && sc->swappiness) { |
1926 | scan_balance = SCAN_EQUAL; | 1922 | scan_balance = SCAN_EQUAL; |
1927 | goto out; | 1923 | goto out; |
1928 | } | 1924 | } |
@@ -1965,7 +1961,7 @@ static void get_scan_count(struct lruvec *lruvec, struct scan_control *sc, | |||
1965 | * With swappiness at 100, anonymous and file have the same priority. | 1961 | * With swappiness at 100, anonymous and file have the same priority. |
1966 | * This scanning priority is essentially the inverse of IO cost. | 1962 | * This scanning priority is essentially the inverse of IO cost. |
1967 | */ | 1963 | */ |
1968 | anon_prio = vmscan_swappiness(sc); | 1964 | anon_prio = sc->swappiness; |
1969 | file_prio = 200 - anon_prio; | 1965 | file_prio = 200 - anon_prio; |
1970 | 1966 | ||
1971 | /* | 1967 | /* |
@@ -2265,6 +2261,7 @@ static void shrink_zone(struct zone *zone, struct scan_control *sc) | |||
2265 | 2261 | ||
2266 | lruvec = mem_cgroup_zone_lruvec(zone, memcg); | 2262 | lruvec = mem_cgroup_zone_lruvec(zone, memcg); |
2267 | 2263 | ||
2264 | sc->swappiness = mem_cgroup_swappiness(memcg); | ||
2268 | shrink_lruvec(lruvec, sc); | 2265 | shrink_lruvec(lruvec, sc); |
2269 | 2266 | ||
2270 | /* | 2267 | /* |
@@ -2731,6 +2728,7 @@ unsigned long mem_cgroup_shrink_node_zone(struct mem_cgroup *memcg, | |||
2731 | .may_swap = !noswap, | 2728 | .may_swap = !noswap, |
2732 | .order = 0, | 2729 | .order = 0, |
2733 | .priority = 0, | 2730 | .priority = 0, |
2731 | .swappiness = mem_cgroup_swappiness(memcg), | ||
2734 | .target_mem_cgroup = memcg, | 2732 | .target_mem_cgroup = memcg, |
2735 | }; | 2733 | }; |
2736 | struct lruvec *lruvec = mem_cgroup_zone_lruvec(zone, memcg); | 2734 | struct lruvec *lruvec = mem_cgroup_zone_lruvec(zone, memcg); |