diff options
author | Pavel Emelianov <xemul@sw.ru> | 2007-07-16 02:38:04 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-16 12:05:35 -0400 |
commit | b92151bab91ef906378d3e0e7128d55dd641e966 (patch) | |
tree | 81f96a5976bcc749c42a9ae293e16667ea2d9afe | |
parent | 68e116a3b57d09b220fe38712bebd956b6dbbbc6 (diff) |
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: Pavel Emelianov <xemul@openvz.org>
Cc: Christoph Lameter <clameter@sgi.com>
Cc: Pekka Enberg <penberg@cs.helsinki.fi>
Signed-off-by: Alexey Dobriyan <adobriyan@sw.ru>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | mm/slab.c | 30 |
1 files changed, 6 insertions, 24 deletions
@@ -4157,26 +4157,17 @@ static void print_slabinfo_header(struct seq_file *m) | |||
4157 | static void *s_start(struct seq_file *m, loff_t *pos) | 4157 | static void *s_start(struct seq_file *m, loff_t *pos) |
4158 | { | 4158 | { |
4159 | loff_t n = *pos; | 4159 | loff_t n = *pos; |
4160 | struct list_head *p; | ||
4161 | 4160 | ||
4162 | mutex_lock(&cache_chain_mutex); | 4161 | mutex_lock(&cache_chain_mutex); |
4163 | if (!n) | 4162 | if (!n) |
4164 | print_slabinfo_header(m); | 4163 | print_slabinfo_header(m); |
4165 | p = cache_chain.next; | 4164 | |
4166 | while (n--) { | 4165 | return seq_list_start(&cache_chain, *pos); |
4167 | p = p->next; | ||
4168 | if (p == &cache_chain) | ||
4169 | return NULL; | ||
4170 | } | ||
4171 | return list_entry(p, struct kmem_cache, next); | ||
4172 | } | 4166 | } |
4173 | 4167 | ||
4174 | static void *s_next(struct seq_file *m, void *p, loff_t *pos) | 4168 | static void *s_next(struct seq_file *m, void *p, loff_t *pos) |
4175 | { | 4169 | { |
4176 | struct kmem_cache *cachep = p; | 4170 | return seq_list_next(p, &cache_chain, pos); |
4177 | ++*pos; | ||
4178 | return cachep->next.next == &cache_chain ? | ||
4179 | NULL : list_entry(cachep->next.next, struct kmem_cache, next); | ||
4180 | } | 4171 | } |
4181 | 4172 | ||
4182 | static void s_stop(struct seq_file *m, void *p) | 4173 | 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 | 4177 | ||
4187 | static int s_show(struct seq_file *m, void *p) | 4178 | static int s_show(struct seq_file *m, void *p) |
4188 | { | 4179 | { |
4189 | struct kmem_cache *cachep = p; | 4180 | struct kmem_cache *cachep = list_entry(p, struct kmem_cache, next); |
4190 | struct slab *slabp; | 4181 | struct slab *slabp; |
4191 | unsigned long active_objs; | 4182 | unsigned long active_objs; |
4192 | unsigned long num_objs; | 4183 | unsigned long num_objs; |
@@ -4355,17 +4346,8 @@ ssize_t slabinfo_write(struct file *file, const char __user * buffer, | |||
4355 | 4346 | ||
4356 | static void *leaks_start(struct seq_file *m, loff_t *pos) | 4347 | static void *leaks_start(struct seq_file *m, loff_t *pos) |
4357 | { | 4348 | { |
4358 | loff_t n = *pos; | ||
4359 | struct list_head *p; | ||
4360 | |||
4361 | mutex_lock(&cache_chain_mutex); | 4349 | mutex_lock(&cache_chain_mutex); |
4362 | p = cache_chain.next; | 4350 | return seq_list_start(&cache_chain, *pos); |
4363 | while (n--) { | ||
4364 | p = p->next; | ||
4365 | if (p == &cache_chain) | ||
4366 | return NULL; | ||
4367 | } | ||
4368 | return list_entry(p, struct kmem_cache, next); | ||
4369 | } | 4351 | } |
4370 | 4352 | ||
4371 | static inline int add_caller(unsigned long *n, unsigned long v) | 4353 | 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 | 4412 | ||
4431 | static int leaks_show(struct seq_file *m, void *p) | 4413 | static int leaks_show(struct seq_file *m, void *p) |
4432 | { | 4414 | { |
4433 | struct kmem_cache *cachep = p; | 4415 | struct kmem_cache *cachep = list_entry(p, struct kmem_cache, next); |
4434 | struct slab *slabp; | 4416 | struct slab *slabp; |
4435 | struct kmem_list3 *l3; | 4417 | struct kmem_list3 *l3; |
4436 | const char *name; | 4418 | const char *name; |