#ifdef CONFIG_DEBUG_SLAB_LEAK
 
-static void *leaks_start(struct seq_file *m, loff_t *pos)
-{
-       mutex_lock(&slab_mutex);
-       return seq_list_start(&slab_caches, *pos);
-}
-
 static inline int add_caller(unsigned long *n, unsigned long v)
 {
        unsigned long *p;
 }
 
 static const struct seq_operations slabstats_op = {
-       .start = leaks_start,
+       .start = slab_start,
        .next = slab_next,
        .stop = slab_stop,
        .show = leaks_show,
 
 
 #endif
 
+void *slab_start(struct seq_file *m, loff_t *pos);
 void *slab_next(struct seq_file *m, void *p, loff_t *pos);
 void slab_stop(struct seq_file *m, void *p);
 
 
        seq_putc(m, '\n');
 }
 
-static void *s_start(struct seq_file *m, loff_t *pos)
+void *slab_start(struct seq_file *m, loff_t *pos)
 {
-       loff_t n = *pos;
-
        mutex_lock(&slab_mutex);
-       if (!n)
-               print_slabinfo_header(m);
-
        return seq_list_start(&slab_caches, *pos);
 }
 
        return 0;
 }
 
-static int s_show(struct seq_file *m, void *p)
+static int slab_show(struct seq_file *m, void *p)
 {
        struct kmem_cache *s = list_entry(p, struct kmem_cache, list);
 
+       if (p == slab_caches.next)
+               print_slabinfo_header(m);
        if (!is_root_cache(s))
                return 0;
        return cache_show(s, m);
  * + further values on SMP and with statistics enabled
  */
 static const struct seq_operations slabinfo_op = {
-       .start = s_start,
+       .start = slab_start,
        .next = slab_next,
        .stop = slab_stop,
-       .show = s_show,
+       .show = slab_show,
 };
 
 static int slabinfo_open(struct inode *inode, struct file *file)