Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 339334
b: refs/heads/master
c: 4e139af
h: refs/heads/master
v: v3
  • Loading branch information
Tejun Heo committed Nov 19, 2012
1 parent ecfe69f commit 0901c12
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 19 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 28fd6f30ac3efd9170ae1ac89f3521d53b5eb83a
refs/heads/master: 4e139afc22cb98d0d032ffce0285bfcc73ca5217
30 changes: 12 additions & 18 deletions trunk/kernel/cgroup.c
Original file line number Diff line number Diff line change
Expand Up @@ -4112,15 +4112,22 @@ static long cgroup_create(struct cgroup *parent, struct dentry *dentry,
}
}

list_add_tail_rcu(&cgrp->sibling, &cgrp->parent->children);
root->number_of_cgroups++;

/*
* Create directory. cgroup_create_file() returns with the new
* directory locked on success so that it can be populated without
* dropping cgroup_mutex.
*/
err = cgroup_create_file(dentry, S_IFDIR | mode, sb);
if (err < 0)
goto err_remove;
goto err_destroy;
lockdep_assert_held(&dentry->d_inode->i_mutex);

/* allocation complete, commit to creation */
dentry->d_fsdata = cgrp;
rcu_assign_pointer(cgrp->dentry, dentry);
list_add_tail(&cgrp->allcg_node, &root->allcg_list);
list_add_tail_rcu(&cgrp->sibling, &cgrp->parent->children);
root->number_of_cgroups++;

for_each_subsys(root, ss) {
/* each css holds a ref to the cgroup's dentry */
Expand All @@ -4131,11 +4138,6 @@ static long cgroup_create(struct cgroup *parent, struct dentry *dentry,
ss->post_create(cgrp);
}

/* The cgroup directory was pre-locked for us */
BUG_ON(!mutex_is_locked(&cgrp->dentry->d_inode->i_mutex));

list_add_tail(&cgrp->allcg_node, &root->allcg_list);

err = cgroup_populate_dir(cgrp, true, root->subsys_mask);
/* If err < 0, we have a half-filled directory - oh well ;) */

Expand All @@ -4144,20 +4146,12 @@ static long cgroup_create(struct cgroup *parent, struct dentry *dentry,

return 0;

err_remove:

list_del_rcu(&cgrp->sibling);
root->number_of_cgroups--;

err_destroy:

err_destroy:
for_each_subsys(root, ss) {
if (cgrp->subsys[ss->subsys_id])
ss->destroy(cgrp);
}

mutex_unlock(&cgroup_mutex);

/* Release the reference count that we took on the superblock */
deactivate_super(sb);
err_free:
Expand Down

0 comments on commit 0901c12

Please sign in to comment.