@ -4277,7 +4277,7 @@ out:
# ifdef CONFIG_SLABINFO
static void print_slabinfo_header ( struct seq_file * m )
void print_slabinfo_header ( struct seq_file * m )
{
/*
* Output format version , so at least we can change it
@ -4300,28 +4300,7 @@ static void print_slabinfo_header(struct seq_file *m)
seq_putc ( m , ' \n ' ) ;
}
static void * s_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 ) ;
}
static void * s_next ( struct seq_file * m , void * p , loff_t * pos )
{
return seq_list_next ( p , & slab_caches , pos ) ;
}
static void s_stop ( struct seq_file * m , void * p )
{
mutex_unlock ( & slab_mutex ) ;
}
static int s_show ( struct seq_file * m , void * p )
int slabinfo_show ( struct seq_file * m , void * p )
{
struct kmem_cache * cachep = list_entry ( p , struct kmem_cache , list ) ;
struct slab * slabp ;
@ -4418,27 +4397,6 @@ static int s_show(struct seq_file *m, void *p)
return 0 ;
}
/*
* slabinfo_op - iterator that generates / proc / slabinfo
*
* Output layout :
* cache - name
* num - active - objs
* total - objs
* object size
* num - active - slabs
* total - slabs
* num - pages - per - slab
* + further values on SMP and with statistics enabled
*/
static const struct seq_operations slabinfo_op = {
. start = s_start ,
. next = s_next ,
. stop = s_stop ,
. show = s_show ,
} ;
# define MAX_SLABINFO_WRITE 128
/**
* slabinfo_write - Tuning for the slab allocator
@ -4447,7 +4405,7 @@ static const struct seq_operations slabinfo_op = {
* @ count : data length
* @ ppos : unused
*/
static ssize_t slabinfo_write ( struct file * file , const char __user * buffer ,
ssize_t slabinfo_write ( struct file * file , const char __user * buffer ,
size_t count , loff_t * ppos )
{
char kbuf [ MAX_SLABINFO_WRITE + 1 ] , * tmp ;
@ -4490,19 +4448,6 @@ static ssize_t slabinfo_write(struct file *file, const char __user *buffer,
return res ;
}
static int slabinfo_open ( struct inode * inode , struct file * file )
{
return seq_open ( file , & slabinfo_op ) ;
}
static const struct file_operations proc_slabinfo_operations = {
. open = slabinfo_open ,
. read = seq_read ,
. write = slabinfo_write ,
. llseek = seq_lseek ,
. release = seq_release ,
} ;
# ifdef CONFIG_DEBUG_SLAB_LEAK
static void * leaks_start ( struct seq_file * m , loff_t * pos )
@ -4631,6 +4576,16 @@ static int leaks_show(struct seq_file *m, void *p)
return 0 ;
}
static void * s_next ( struct seq_file * m , void * p , loff_t * pos )
{
return seq_list_next ( p , & slab_caches , pos ) ;
}
static void s_stop ( struct seq_file * m , void * p )
{
mutex_unlock ( & slab_mutex ) ;
}
static const struct seq_operations slabstats_op = {
. start = leaks_start ,
. next = s_next ,
@ -4665,7 +4620,6 @@ static const struct file_operations proc_slabstats_operations = {
static int __init slab_proc_init ( void )
{
proc_create ( " slabinfo " , S_IWUSR | S_IRUSR , NULL , & proc_slabinfo_operations ) ;
# ifdef CONFIG_DEBUG_SLAB_LEAK
proc_create ( " slab_allocators " , 0 , NULL , & proc_slabstats_operations ) ;
# endif