aboutsummaryrefslogtreecommitdiffstats
path: root/mm/memcontrol.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/memcontrol.c')
-rw-r--r--mm/memcontrol.c51
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
1107static int calc_inactive_ratio(struct mem_cgroup *memcg, unsigned long *present_pages) 1107int 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
1131int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg) 1130int 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
1149int 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;