|
@@ -811,7 +811,7 @@ EXPORT_SYMBOL(kmalloc_order_trace);
|
|
|
#define SLABINFO_RIGHTS S_IRUSR
|
|
|
#endif
|
|
|
|
|
|
-void print_slabinfo_header(struct seq_file *m)
|
|
|
+static void print_slabinfo_header(struct seq_file *m)
|
|
|
{
|
|
|
/*
|
|
|
* Output format version, so at least we can change it
|
|
@@ -876,7 +876,7 @@ memcg_accumulate_slabinfo(struct kmem_cache *s, struct slabinfo *info)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-int cache_show(struct kmem_cache *s, struct seq_file *m)
|
|
|
+static void cache_show(struct kmem_cache *s, struct seq_file *m)
|
|
|
{
|
|
|
struct slabinfo sinfo;
|
|
|
|
|
@@ -895,7 +895,6 @@ int cache_show(struct kmem_cache *s, struct seq_file *m)
|
|
|
sinfo.active_slabs, sinfo.num_slabs, sinfo.shared_avail);
|
|
|
slabinfo_show_stats(m, s);
|
|
|
seq_putc(m, '\n');
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
static int slab_show(struct seq_file *m, void *p)
|
|
@@ -904,10 +903,24 @@ static int slab_show(struct seq_file *m, void *p)
|
|
|
|
|
|
if (p == slab_caches.next)
|
|
|
print_slabinfo_header(m);
|
|
|
- if (!is_root_cache(s))
|
|
|
- return 0;
|
|
|
- return cache_show(s, m);
|
|
|
+ if (is_root_cache(s))
|
|
|
+ cache_show(s, m);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+#ifdef CONFIG_MEMCG_KMEM
|
|
|
+int memcg_slab_show(struct seq_file *m, void *p)
|
|
|
+{
|
|
|
+ struct kmem_cache *s = list_entry(p, struct kmem_cache, list);
|
|
|
+ struct mem_cgroup *memcg = mem_cgroup_from_css(seq_css(m));
|
|
|
+
|
|
|
+ if (p == slab_caches.next)
|
|
|
+ print_slabinfo_header(m);
|
|
|
+ if (!is_root_cache(s) && s->memcg_params->memcg == memcg)
|
|
|
+ cache_show(s, m);
|
|
|
+ return 0;
|
|
|
}
|
|
|
+#endif
|
|
|
|
|
|
/*
|
|
|
* slabinfo_op - iterator that generates /proc/slabinfo
|