diff options
Diffstat (limited to 'kernel/cgroup.c')
| -rw-r--r-- | kernel/cgroup.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/kernel/cgroup.c b/kernel/cgroup.c index 9d03abef6676..e8d71110ed2a 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c @@ -2776,10 +2776,9 @@ static ssize_t __cgroup_procs_write(struct kernfs_open_file *of, char *buf, size_t nbytes, loff_t off, bool threadgroup) { struct task_struct *tsk; - struct cgroup_subsys *ss; struct cgroup *cgrp; pid_t pid; - int ssid, ret; + int ret; if (kstrtoint(strstrip(buf), 0, &pid) || pid < 0) return -EINVAL; @@ -2827,10 +2826,8 @@ out_unlock_rcu: rcu_read_unlock(); out_unlock_threadgroup: percpu_up_write(&cgroup_threadgroup_rwsem); - for_each_subsys(ss, ssid) - if (ss->post_attach) - ss->post_attach(); cgroup_kn_unlock(of->kn); + cpuset_post_attach_flush(); return ret ?: nbytes; } @@ -4747,15 +4744,14 @@ static void css_free_work_fn(struct work_struct *work) if (ss) { /* css free path */ - struct cgroup_subsys_state *parent = css->parent; int id = css->id; + if (css->parent) + css_put(css->parent); + ss->css_free(css); cgroup_idr_remove(&ss->css_idr, id); cgroup_put(cgrp); - - if (parent) - css_put(parent); } else { /* cgroup free path */ atomic_dec(&cgrp->root->nr_cgrps); |
