提交 b92151ba 编写于 作者: P Pavel Emelianov 提交者: Linus Torvalds

Make /proc/slabinfo use seq_list_xxx helpers

This entry prints a header in .start callback.  This is OK, but the more
elegant solution would be to move this into the .show callback and use
seq_list_start_head() in .start one.

I have left it as is in order to make the patch just switch to new API and
noting more.

[adobriyan@sw.ru: Wrong pointer was used as kmem_cache pointer]
Signed-off-by: NPavel Emelianov <xemul@openvz.org>
Cc: Christoph Lameter <clameter@sgi.com>
Cc: Pekka Enberg <penberg@cs.helsinki.fi>
Signed-off-by: NAlexey Dobriyan <adobriyan@sw.ru>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 68e116a3
...@@ -4157,26 +4157,17 @@ static void print_slabinfo_header(struct seq_file *m) ...@@ -4157,26 +4157,17 @@ static void print_slabinfo_header(struct seq_file *m)
static void *s_start(struct seq_file *m, loff_t *pos) static void *s_start(struct seq_file *m, loff_t *pos)
{ {
loff_t n = *pos; loff_t n = *pos;
struct list_head *p;
mutex_lock(&cache_chain_mutex); mutex_lock(&cache_chain_mutex);
if (!n) if (!n)
print_slabinfo_header(m); print_slabinfo_header(m);
p = cache_chain.next;
while (n--) { return seq_list_start(&cache_chain, *pos);
p = p->next;
if (p == &cache_chain)
return NULL;
}
return list_entry(p, struct kmem_cache, next);
} }
static void *s_next(struct seq_file *m, void *p, loff_t *pos) static void *s_next(struct seq_file *m, void *p, loff_t *pos)
{ {
struct kmem_cache *cachep = p; return seq_list_next(p, &cache_chain, pos);
++*pos;
return cachep->next.next == &cache_chain ?
NULL : list_entry(cachep->next.next, struct kmem_cache, next);
} }
static void s_stop(struct seq_file *m, void *p) static void s_stop(struct seq_file *m, void *p)
...@@ -4186,7 +4177,7 @@ static void s_stop(struct seq_file *m, void *p) ...@@ -4186,7 +4177,7 @@ static void s_stop(struct seq_file *m, void *p)
static int s_show(struct seq_file *m, void *p) static int s_show(struct seq_file *m, void *p)
{ {
struct kmem_cache *cachep = p; struct kmem_cache *cachep = list_entry(p, struct kmem_cache, next);
struct slab *slabp; struct slab *slabp;
unsigned long active_objs; unsigned long active_objs;
unsigned long num_objs; unsigned long num_objs;
...@@ -4355,17 +4346,8 @@ ssize_t slabinfo_write(struct file *file, const char __user * buffer, ...@@ -4355,17 +4346,8 @@ ssize_t slabinfo_write(struct file *file, const char __user * buffer,
static void *leaks_start(struct seq_file *m, loff_t *pos) static void *leaks_start(struct seq_file *m, loff_t *pos)
{ {
loff_t n = *pos;
struct list_head *p;
mutex_lock(&cache_chain_mutex); mutex_lock(&cache_chain_mutex);
p = cache_chain.next; return seq_list_start(&cache_chain, *pos);
while (n--) {
p = p->next;
if (p == &cache_chain)
return NULL;
}
return list_entry(p, struct kmem_cache, next);
} }
static inline int add_caller(unsigned long *n, unsigned long v) static inline int add_caller(unsigned long *n, unsigned long v)
...@@ -4430,7 +4412,7 @@ static void show_symbol(struct seq_file *m, unsigned long address) ...@@ -4430,7 +4412,7 @@ static void show_symbol(struct seq_file *m, unsigned long address)
static int leaks_show(struct seq_file *m, void *p) static int leaks_show(struct seq_file *m, void *p)
{ {
struct kmem_cache *cachep = p; struct kmem_cache *cachep = list_entry(p, struct kmem_cache, next);
struct slab *slabp; struct slab *slabp;
struct kmem_list3 *l3; struct kmem_list3 *l3;
const char *name; const char *name;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册