@ -876,7 +876,7 @@ static void cgroup_diput(struct dentry *dentry, struct inode *inode)
* Release the subsystem state objects .
*/
for_each_subsys ( cgrp - > root , ss )
ss - > destroy ( cgrp ) ;
ss - > css_free ( cgrp ) ;
cgrp - > root - > number_of_cgroups - - ;
mutex_unlock ( & cgroup_mutex ) ;
@ -4048,8 +4048,8 @@ static int online_css(struct cgroup_subsys *ss, struct cgroup *cgrp)
lockdep_assert_held ( & cgroup_mutex ) ;
if ( ss - > post_creat e)
ret = ss - > post_creat e( cgrp ) ;
if ( ss - > css_onlin e)
ret = ss - > css_onlin e( cgrp ) ;
if ( ! ret )
cgrp - > subsys [ ss - > subsys_id ] - > flags | = CSS_ONLINE ;
return ret ;
@ -4067,14 +4067,14 @@ static void offline_css(struct cgroup_subsys *ss, struct cgroup *cgrp)
return ;
/*
* pre_destroy ( ) should be called with cgroup_mutex unlocked . See
* css_offline ( ) should be called with cgroup_mutex unlocked . See
* 3f a59dfbc3 ( " cgroup: fix potential deadlock in pre_destroy " ) for
* details . This temporary unlocking should go away once
* cgroup_mutex is unexported from controllers .
*/
if ( ss - > pre_destroy ) {
if ( ss - > css_offline ) {
mutex_unlock ( & cgroup_mutex ) ;
ss - > pre_destroy ( cgrp ) ;
ss - > css_offline ( cgrp ) ;
mutex_lock ( & cgroup_mutex ) ;
}
@ -4136,7 +4136,7 @@ static long cgroup_create(struct cgroup *parent, struct dentry *dentry,
for_each_subsys ( root , ss ) {
struct cgroup_subsys_state * css ;
css = ss - > create ( cgrp ) ;
css = ss - > css_alloc ( cgrp ) ;
if ( IS_ERR ( css ) ) {
err = PTR_ERR ( css ) ;
goto err_free_all ;
@ -4147,7 +4147,7 @@ static long cgroup_create(struct cgroup *parent, struct dentry *dentry,
if ( err )
goto err_free_all ;
}
/* At error, ->destroy () callback has to free assigned ID. */
/* At error, ->css_free () callback has to free assigned ID. */
if ( clone_children ( parent ) & & ss - > post_clone )
ss - > post_clone ( cgrp ) ;
@ -4201,7 +4201,7 @@ static long cgroup_create(struct cgroup *parent, struct dentry *dentry,
err_free_all :
for_each_subsys ( root , ss ) {
if ( cgrp - > subsys [ ss - > subsys_id ] )
ss - > destroy ( cgrp ) ;
ss - > css_free ( cgrp ) ;
}
mutex_unlock ( & cgroup_mutex ) ;
/* Release the reference count that we took on the superblock */
@ -4381,7 +4381,7 @@ static void __init cgroup_init_subsys(struct cgroup_subsys *ss)
/* Create the top cgroup state for this subsystem */
list_add ( & ss - > sibling , & rootnode . subsys_list ) ;
ss - > root = & rootnode ;
css = ss - > create ( dummytop ) ;
css = ss - > css_alloc ( dummytop ) ;
/* We don't handle early failures gracefully */
BUG_ON ( IS_ERR ( css ) ) ;
init_cgroup_css ( css , ss , dummytop ) ;
@ -4425,7 +4425,7 @@ int __init_or_module cgroup_load_subsys(struct cgroup_subsys *ss)
/* check name and function validity */
if ( ss - > name = = NULL | | strlen ( ss - > name ) > MAX_CGROUP_TYPE_NAMELEN | |
ss - > create = = NULL | | ss - > destroy = = NULL )
ss - > css_alloc = = NULL | | ss - > css_free = = NULL )
return - EINVAL ;
/*
@ -4454,10 +4454,11 @@ int __init_or_module cgroup_load_subsys(struct cgroup_subsys *ss)
subsys [ ss - > subsys_id ] = ss ;
/*
* no ss - > create seems to need anything important in the ss struct , so
* this can happen first ( i . e . before the rootnode attachment ) .
* no ss - > css_alloc seems to need anything important in the ss
* struct , so this can happen first ( i . e . before the rootnode
* attachment ) .
*/
css = ss - > create ( dummytop ) ;
css = ss - > css_alloc ( dummytop ) ;
if ( IS_ERR ( css ) ) {
/* failure case - need to deassign the subsys[] slot. */
subsys [ ss - > subsys_id ] = NULL ;
@ -4577,12 +4578,12 @@ void cgroup_unload_subsys(struct cgroup_subsys *ss)
write_unlock ( & css_set_lock ) ;
/*
* remove subsystem ' s css from the dummytop and free it - need to free
* before marking as null because ss - > destroy needs the cgrp - > subsys
* pointer to find their state . note that this also takes care of
* freeing the css_id .
* remove subsystem ' s css from the dummytop and free it - need to
* free before marking as null because ss - > css_free needs the
* cgrp - > subsys pointer to find their state . note that this also
* takes care of freeing the css_id .
*/
ss - > destroy ( dummytop ) ;
ss - > css_free ( dummytop ) ;
dummytop - > subsys [ ss - > subsys_id ] = NULL ;
mutex_unlock ( & cgroup_mutex ) ;
@ -4626,8 +4627,8 @@ int __init cgroup_init_early(void)
BUG_ON ( ! ss - > name ) ;
BUG_ON ( strlen ( ss - > name ) > MAX_CGROUP_TYPE_NAMELEN ) ;
BUG_ON ( ! ss - > create ) ;
BUG_ON ( ! ss - > destroy ) ;
BUG_ON ( ! ss - > css_alloc ) ;
BUG_ON ( ! ss - > css_free ) ;
if ( ss - > subsys_id ! = i ) {
printk ( KERN_ERR " cgroup: Subsys %s id == %d \n " ,
ss - > name , ss - > subsys_id ) ;
@ -5439,7 +5440,7 @@ struct cgroup_subsys_state *cgroup_css_from_dir(struct file *f, int id)
}
# ifdef CONFIG_CGROUP_DEBUG
static struct cgroup_subsys_state * debug_create ( struct cgroup * cont )
static struct cgroup_subsys_state * debug_css_alloc ( struct cgroup * cont )
{
struct cgroup_subsys_state * css = kzalloc ( sizeof ( * css ) , GFP_KERNEL ) ;
@ -5449,7 +5450,7 @@ static struct cgroup_subsys_state *debug_create(struct cgroup *cont)
return css ;
}
static void debug_destroy ( struct cgroup * cont )
static void debug_css_free ( struct cgroup * cont )
{
kfree ( cont - > subsys [ debug_subsys_id ] ) ;
}
@ -5578,8 +5579,8 @@ static struct cftype debug_files[] = {
struct cgroup_subsys debug_subsys = {
. name = " debug " ,
. create = debug_create ,
. destroy = debug_destroy ,
. css_alloc = debug_css_alloc ,
. css_free = debug_css_free ,
. subsys_id = debug_subsys_id ,
. base_cftypes = debug_files ,
} ;