diff options
Diffstat (limited to 'mm/memcontrol.c')
-rw-r--r-- | mm/memcontrol.c | 51 |
1 files changed, 17 insertions, 34 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index f6c4beb4db56..ce7b35d024e9 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -1104,15 +1104,19 @@ int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *memcg) | |||
1104 | return ret; | 1104 | return ret; |
1105 | } | 1105 | } |
1106 | 1106 | ||
1107 | static int calc_inactive_ratio(struct mem_cgroup *memcg, unsigned long *present_pages) | 1107 | int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg, struct zone *zone) |
1108 | { | 1108 | { |
1109 | unsigned long active; | 1109 | unsigned long inactive_ratio; |
1110 | int nid = zone_to_nid(zone); | ||
1111 | int zid = zone_idx(zone); | ||
1110 | unsigned long inactive; | 1112 | unsigned long inactive; |
1113 | unsigned long active; | ||
1111 | unsigned long gb; | 1114 | unsigned long gb; |
1112 | unsigned long inactive_ratio; | ||
1113 | 1115 | ||
1114 | inactive = mem_cgroup_nr_lru_pages(memcg, BIT(LRU_INACTIVE_ANON)); | 1116 | inactive = mem_cgroup_zone_nr_lru_pages(memcg, nid, zid, |
1115 | active = mem_cgroup_nr_lru_pages(memcg, BIT(LRU_ACTIVE_ANON)); | 1117 | BIT(LRU_INACTIVE_ANON)); |
1118 | active = mem_cgroup_zone_nr_lru_pages(memcg, nid, zid, | ||
1119 | BIT(LRU_ACTIVE_ANON)); | ||
1116 | 1120 | ||
1117 | gb = (inactive + active) >> (30 - PAGE_SHIFT); | 1121 | gb = (inactive + active) >> (30 - PAGE_SHIFT); |
1118 | if (gb) | 1122 | if (gb) |
@@ -1120,39 +1124,20 @@ static int calc_inactive_ratio(struct mem_cgroup *memcg, unsigned long *present_ | |||
1120 | else | 1124 | else |
1121 | inactive_ratio = 1; | 1125 | inactive_ratio = 1; |
1122 | 1126 | ||
1123 | if (present_pages) { | 1127 | return inactive * inactive_ratio < active; |
1124 | present_pages[0] = inactive; | ||
1125 | present_pages[1] = active; | ||
1126 | } | ||
1127 | |||
1128 | return inactive_ratio; | ||
1129 | } | 1128 | } |
1130 | 1129 | ||
1131 | int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg) | 1130 | int mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg, struct zone *zone) |
1132 | { | ||
1133 | unsigned long active; | ||
1134 | unsigned long inactive; | ||
1135 | unsigned long present_pages[2]; | ||
1136 | unsigned long inactive_ratio; | ||
1137 | |||
1138 | inactive_ratio = calc_inactive_ratio(memcg, present_pages); | ||
1139 | |||
1140 | inactive = present_pages[0]; | ||
1141 | active = present_pages[1]; | ||
1142 | |||
1143 | if (inactive * inactive_ratio < active) | ||
1144 | return 1; | ||
1145 | |||
1146 | return 0; | ||
1147 | } | ||
1148 | |||
1149 | int mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg) | ||
1150 | { | 1131 | { |
1151 | unsigned long active; | 1132 | unsigned long active; |
1152 | unsigned long inactive; | 1133 | unsigned long inactive; |
1134 | int zid = zone_idx(zone); | ||
1135 | int nid = zone_to_nid(zone); | ||
1153 | 1136 | ||
1154 | inactive = mem_cgroup_nr_lru_pages(memcg, BIT(LRU_INACTIVE_FILE)); | 1137 | inactive = mem_cgroup_zone_nr_lru_pages(memcg, nid, zid, |
1155 | active = mem_cgroup_nr_lru_pages(memcg, BIT(LRU_ACTIVE_FILE)); | 1138 | BIT(LRU_INACTIVE_FILE)); |
1139 | active = mem_cgroup_zone_nr_lru_pages(memcg, nid, zid, | ||
1140 | BIT(LRU_ACTIVE_FILE)); | ||
1156 | 1141 | ||
1157 | return (active > inactive); | 1142 | return (active > inactive); |
1158 | } | 1143 | } |
@@ -4192,8 +4177,6 @@ static int mem_control_stat_show(struct cgroup *cont, struct cftype *cft, | |||
4192 | } | 4177 | } |
4193 | 4178 | ||
4194 | #ifdef CONFIG_DEBUG_VM | 4179 | #ifdef CONFIG_DEBUG_VM |
4195 | cb->fill(cb, "inactive_ratio", calc_inactive_ratio(mem_cont, NULL)); | ||
4196 | |||
4197 | { | 4180 | { |
4198 | int nid, zid; | 4181 | int nid, zid; |
4199 | struct mem_cgroup_per_zone *mz; | 4182 | struct mem_cgroup_per_zone *mz; |