|
@@ -4059,10 +4059,15 @@ static long cgroup_create(struct cgroup *parent, struct dentry *dentry,
|
|
|
if (err < 0)
|
|
|
goto err_remove;
|
|
|
|
|
|
- /* each css holds a ref to the cgroup's dentry */
|
|
|
- for_each_subsys(root, ss)
|
|
|
+ for_each_subsys(root, ss) {
|
|
|
+ /* each css holds a ref to the cgroup's dentry */
|
|
|
dget(dentry);
|
|
|
|
|
|
+ /* creation succeeded, notify subsystems */
|
|
|
+ if (ss->post_create)
|
|
|
+ ss->post_create(cgrp);
|
|
|
+ }
|
|
|
+
|
|
|
/* The cgroup directory was pre-locked for us */
|
|
|
BUG_ON(!mutex_is_locked(&cgrp->dentry->d_inode->i_mutex));
|
|
|
|
|
@@ -4280,6 +4285,9 @@ static void __init cgroup_init_subsys(struct cgroup_subsys *ss)
|
|
|
|
|
|
ss->active = 1;
|
|
|
|
|
|
+ if (ss->post_create)
|
|
|
+ ss->post_create(&ss->root->top_cgroup);
|
|
|
+
|
|
|
/* this function shouldn't be used with modular subsystems, since they
|
|
|
* need to register a subsys_id, among other things */
|
|
|
BUG_ON(ss->module);
|
|
@@ -4389,6 +4397,9 @@ int __init_or_module cgroup_load_subsys(struct cgroup_subsys *ss)
|
|
|
|
|
|
ss->active = 1;
|
|
|
|
|
|
+ if (ss->post_create)
|
|
|
+ ss->post_create(&ss->root->top_cgroup);
|
|
|
+
|
|
|
/* success! */
|
|
|
mutex_unlock(&cgroup_mutex);
|
|
|
return 0;
|