diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/cgroup.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/kernel/cgroup.c b/kernel/cgroup.c index 7868fc3c0bc5..c06aa5e257a8 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c | |||
| @@ -1638,7 +1638,7 @@ destroy_root: | |||
| 1638 | exit_root_id: | 1638 | exit_root_id: |
| 1639 | cgroup_exit_root_id(root); | 1639 | cgroup_exit_root_id(root); |
| 1640 | cancel_ref: | 1640 | cancel_ref: |
| 1641 | percpu_ref_cancel_init(&root_cgrp->self.refcnt); | 1641 | percpu_ref_exit(&root_cgrp->self.refcnt); |
| 1642 | out: | 1642 | out: |
| 1643 | free_cgrp_cset_links(&tmp_links); | 1643 | free_cgrp_cset_links(&tmp_links); |
| 1644 | return ret; | 1644 | return ret; |
| @@ -4133,6 +4133,8 @@ static void css_free_work_fn(struct work_struct *work) | |||
| 4133 | container_of(work, struct cgroup_subsys_state, destroy_work); | 4133 | container_of(work, struct cgroup_subsys_state, destroy_work); |
| 4134 | struct cgroup *cgrp = css->cgroup; | 4134 | struct cgroup *cgrp = css->cgroup; |
| 4135 | 4135 | ||
| 4136 | percpu_ref_exit(&css->refcnt); | ||
| 4137 | |||
| 4136 | if (css->ss) { | 4138 | if (css->ss) { |
| 4137 | /* css free path */ | 4139 | /* css free path */ |
| 4138 | if (css->parent) | 4140 | if (css->parent) |
| @@ -4330,7 +4332,7 @@ err_list_del: | |||
| 4330 | err_free_id: | 4332 | err_free_id: |
| 4331 | cgroup_idr_remove(&ss->css_idr, css->id); | 4333 | cgroup_idr_remove(&ss->css_idr, css->id); |
| 4332 | err_free_percpu_ref: | 4334 | err_free_percpu_ref: |
| 4333 | percpu_ref_cancel_init(&css->refcnt); | 4335 | percpu_ref_exit(&css->refcnt); |
| 4334 | err_free_css: | 4336 | err_free_css: |
| 4335 | call_rcu(&css->rcu_head, css_free_rcu_fn); | 4337 | call_rcu(&css->rcu_head, css_free_rcu_fn); |
| 4336 | return err; | 4338 | return err; |
| @@ -4441,7 +4443,7 @@ static int cgroup_mkdir(struct kernfs_node *parent_kn, const char *name, | |||
| 4441 | out_free_id: | 4443 | out_free_id: |
| 4442 | cgroup_idr_remove(&root->cgroup_idr, cgrp->id); | 4444 | cgroup_idr_remove(&root->cgroup_idr, cgrp->id); |
| 4443 | out_cancel_ref: | 4445 | out_cancel_ref: |
| 4444 | percpu_ref_cancel_init(&cgrp->self.refcnt); | 4446 | percpu_ref_exit(&cgrp->self.refcnt); |
| 4445 | out_free_cgrp: | 4447 | out_free_cgrp: |
| 4446 | kfree(cgrp); | 4448 | kfree(cgrp); |
| 4447 | out_unlock: | 4449 | out_unlock: |
