diff options
-rw-r--r-- | include/linux/memcontrol.h | 27 | ||||
-rw-r--r-- | mm/memcontrol.c | 25 | ||||
-rw-r--r-- | mm/rmap.c | 4 |
3 files changed, 22 insertions, 34 deletions
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 89d576cfcc4c..f952a07ce7a9 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h | |||
@@ -30,9 +30,20 @@ struct page; | |||
30 | struct mm_struct; | 30 | struct mm_struct; |
31 | struct kmem_cache; | 31 | struct kmem_cache; |
32 | 32 | ||
33 | /* Stats that can be updated by kernel. */ | 33 | /* |
34 | enum mem_cgroup_page_stat_item { | 34 | * The corresponding mem_cgroup_stat_names is defined in mm/memcontrol.c, |
35 | MEMCG_NR_FILE_MAPPED, /* # of pages charged as file rss */ | 35 | * These two lists should keep in accord with each other. |
36 | */ | ||
37 | enum mem_cgroup_stat_index { | ||
38 | /* | ||
39 | * For MEM_CONTAINER_TYPE_ALL, usage = pagecache + rss. | ||
40 | */ | ||
41 | MEM_CGROUP_STAT_CACHE, /* # of pages charged as cache */ | ||
42 | MEM_CGROUP_STAT_RSS, /* # of pages charged as anon rss */ | ||
43 | MEM_CGROUP_STAT_RSS_HUGE, /* # of pages charged as anon huge */ | ||
44 | MEM_CGROUP_STAT_FILE_MAPPED, /* # of pages charged as file rss */ | ||
45 | MEM_CGROUP_STAT_SWAP, /* # of pages, swapped out */ | ||
46 | MEM_CGROUP_STAT_NSTATS, | ||
36 | }; | 47 | }; |
37 | 48 | ||
38 | struct mem_cgroup_reclaim_cookie { | 49 | struct mem_cgroup_reclaim_cookie { |
@@ -233,17 +244,17 @@ static inline void mem_cgroup_end_update_page_stat(struct page *page, | |||
233 | } | 244 | } |
234 | 245 | ||
235 | void mem_cgroup_update_page_stat(struct page *page, | 246 | void mem_cgroup_update_page_stat(struct page *page, |
236 | enum mem_cgroup_page_stat_item idx, | 247 | enum mem_cgroup_stat_index idx, |
237 | int val); | 248 | int val); |
238 | 249 | ||
239 | static inline void mem_cgroup_inc_page_stat(struct page *page, | 250 | static inline void mem_cgroup_inc_page_stat(struct page *page, |
240 | enum mem_cgroup_page_stat_item idx) | 251 | enum mem_cgroup_stat_index idx) |
241 | { | 252 | { |
242 | mem_cgroup_update_page_stat(page, idx, 1); | 253 | mem_cgroup_update_page_stat(page, idx, 1); |
243 | } | 254 | } |
244 | 255 | ||
245 | static inline void mem_cgroup_dec_page_stat(struct page *page, | 256 | static inline void mem_cgroup_dec_page_stat(struct page *page, |
246 | enum mem_cgroup_page_stat_item idx) | 257 | enum mem_cgroup_stat_index idx) |
247 | { | 258 | { |
248 | mem_cgroup_update_page_stat(page, idx, -1); | 259 | mem_cgroup_update_page_stat(page, idx, -1); |
249 | } | 260 | } |
@@ -449,12 +460,12 @@ static inline bool mem_cgroup_oom_synchronize(void) | |||
449 | } | 460 | } |
450 | 461 | ||
451 | static inline void mem_cgroup_inc_page_stat(struct page *page, | 462 | static inline void mem_cgroup_inc_page_stat(struct page *page, |
452 | enum mem_cgroup_page_stat_item idx) | 463 | enum mem_cgroup_stat_index idx) |
453 | { | 464 | { |
454 | } | 465 | } |
455 | 466 | ||
456 | static inline void mem_cgroup_dec_page_stat(struct page *page, | 467 | static inline void mem_cgroup_dec_page_stat(struct page *page, |
457 | enum mem_cgroup_page_stat_item idx) | 468 | enum mem_cgroup_stat_index idx) |
458 | { | 469 | { |
459 | } | 470 | } |
460 | 471 | ||
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 2c71f243186e..f3803462a7e6 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -84,21 +84,6 @@ static int really_do_swap_account __initdata = 0; | |||
84 | #endif | 84 | #endif |
85 | 85 | ||
86 | 86 | ||
87 | /* | ||
88 | * Statistics for memory cgroup. | ||
89 | */ | ||
90 | enum mem_cgroup_stat_index { | ||
91 | /* | ||
92 | * For MEM_CONTAINER_TYPE_ALL, usage = pagecache + rss. | ||
93 | */ | ||
94 | MEM_CGROUP_STAT_CACHE, /* # of pages charged as cache */ | ||
95 | MEM_CGROUP_STAT_RSS, /* # of pages charged as anon rss */ | ||
96 | MEM_CGROUP_STAT_RSS_HUGE, /* # of pages charged as anon huge */ | ||
97 | MEM_CGROUP_STAT_FILE_MAPPED, /* # of pages charged as file rss */ | ||
98 | MEM_CGROUP_STAT_SWAP, /* # of pages, swapped out */ | ||
99 | MEM_CGROUP_STAT_NSTATS, | ||
100 | }; | ||
101 | |||
102 | static const char * const mem_cgroup_stat_names[] = { | 87 | static const char * const mem_cgroup_stat_names[] = { |
103 | "cache", | 88 | "cache", |
104 | "rss", | 89 | "rss", |
@@ -2231,7 +2216,7 @@ void __mem_cgroup_end_update_page_stat(struct page *page, unsigned long *flags) | |||
2231 | } | 2216 | } |
2232 | 2217 | ||
2233 | void mem_cgroup_update_page_stat(struct page *page, | 2218 | void mem_cgroup_update_page_stat(struct page *page, |
2234 | enum mem_cgroup_page_stat_item idx, int val) | 2219 | enum mem_cgroup_stat_index idx, int val) |
2235 | { | 2220 | { |
2236 | struct mem_cgroup *memcg; | 2221 | struct mem_cgroup *memcg; |
2237 | struct page_cgroup *pc = lookup_page_cgroup(page); | 2222 | struct page_cgroup *pc = lookup_page_cgroup(page); |
@@ -2244,14 +2229,6 @@ void mem_cgroup_update_page_stat(struct page *page, | |||
2244 | if (unlikely(!memcg || !PageCgroupUsed(pc))) | 2229 | if (unlikely(!memcg || !PageCgroupUsed(pc))) |
2245 | return; | 2230 | return; |
2246 | 2231 | ||
2247 | switch (idx) { | ||
2248 | case MEMCG_NR_FILE_MAPPED: | ||
2249 | idx = MEM_CGROUP_STAT_FILE_MAPPED; | ||
2250 | break; | ||
2251 | default: | ||
2252 | BUG(); | ||
2253 | } | ||
2254 | |||
2255 | this_cpu_add(memcg->stat->count[idx], val); | 2232 | this_cpu_add(memcg->stat->count[idx], val); |
2256 | } | 2233 | } |
2257 | 2234 | ||
@@ -1111,7 +1111,7 @@ void page_add_file_rmap(struct page *page) | |||
1111 | mem_cgroup_begin_update_page_stat(page, &locked, &flags); | 1111 | mem_cgroup_begin_update_page_stat(page, &locked, &flags); |
1112 | if (atomic_inc_and_test(&page->_mapcount)) { | 1112 | if (atomic_inc_and_test(&page->_mapcount)) { |
1113 | __inc_zone_page_state(page, NR_FILE_MAPPED); | 1113 | __inc_zone_page_state(page, NR_FILE_MAPPED); |
1114 | mem_cgroup_inc_page_stat(page, MEMCG_NR_FILE_MAPPED); | 1114 | mem_cgroup_inc_page_stat(page, MEM_CGROUP_STAT_FILE_MAPPED); |
1115 | } | 1115 | } |
1116 | mem_cgroup_end_update_page_stat(page, &locked, &flags); | 1116 | mem_cgroup_end_update_page_stat(page, &locked, &flags); |
1117 | } | 1117 | } |
@@ -1155,7 +1155,7 @@ void page_remove_rmap(struct page *page) | |||
1155 | NR_ANON_TRANSPARENT_HUGEPAGES); | 1155 | NR_ANON_TRANSPARENT_HUGEPAGES); |
1156 | } else { | 1156 | } else { |
1157 | __dec_zone_page_state(page, NR_FILE_MAPPED); | 1157 | __dec_zone_page_state(page, NR_FILE_MAPPED); |
1158 | mem_cgroup_dec_page_stat(page, MEMCG_NR_FILE_MAPPED); | 1158 | mem_cgroup_dec_page_stat(page, MEM_CGROUP_STAT_FILE_MAPPED); |
1159 | mem_cgroup_end_update_page_stat(page, &locked, &flags); | 1159 | mem_cgroup_end_update_page_stat(page, &locked, &flags); |
1160 | } | 1160 | } |
1161 | if (unlikely(PageMlocked(page))) | 1161 | if (unlikely(PageMlocked(page))) |