aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/memcontrol.h27
-rw-r--r--mm/memcontrol.c25
-rw-r--r--mm/rmap.c4
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;
30struct mm_struct; 30struct mm_struct;
31struct kmem_cache; 31struct kmem_cache;
32 32
33/* Stats that can be updated by kernel. */ 33/*
34enum 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 */
37enum 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
38struct mem_cgroup_reclaim_cookie { 49struct mem_cgroup_reclaim_cookie {
@@ -233,17 +244,17 @@ static inline void mem_cgroup_end_update_page_stat(struct page *page,
233} 244}
234 245
235void mem_cgroup_update_page_stat(struct page *page, 246void 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
239static inline void mem_cgroup_inc_page_stat(struct page *page, 250static 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
245static inline void mem_cgroup_dec_page_stat(struct page *page, 256static 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
451static inline void mem_cgroup_inc_page_stat(struct page *page, 462static 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
456static inline void mem_cgroup_dec_page_stat(struct page *page, 467static 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 */
90enum 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
102static const char * const mem_cgroup_stat_names[] = { 87static 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
2233void mem_cgroup_update_page_stat(struct page *page, 2218void 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
diff --git a/mm/rmap.c b/mm/rmap.c
index 07748e68b729..a21c976a8ec1 100644
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -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)))