History

cgroup: fix a failure path in create_css()

If online_css() fails, we should remove cgroup files belonging to css->ss.

Li Zefan committed 12 years ago

Commit 3eb59ec1 parent 99afb0f1 file · +7 −4Browse files

Showing the changes to kernel (1 of 1 file). Show all

Unified · Split

kernel/cgroup.c+7−4
@@ -4112,17 +4112,17 @@ static int create_css(struct cgroup *cgrp, struct cgroup_subsys *ss) · 4111 unmodified lines
4112 4112
4113 err = percpu_ref_init(&css->refcnt, css_release);4113 err = percpu_ref_init(&css->refcnt, css_release);
4114 if (err)4114 if (err)
4115 goto err_free;4115 goto err_free_css;
4116 4116
4117 init_css(css, ss, cgrp);4117 init_css(css, ss, cgrp);
4118 4118
4119 err = cgroup_populate_dir(cgrp, 1 << ss->subsys_id);4119 err = cgroup_populate_dir(cgrp, 1 << ss->subsys_id);
4120 if (err)4120 if (err)
4121 goto err_free;4121 goto err_free_percpu_ref;
4122 4122
4123 err = online_css(css);4123 err = online_css(css);
4124 if (err)4124 if (err)
4125 goto err_free;4125 goto err_clear_dir;
4126 4126
4127 dget(cgrp->dentry);4127 dget(cgrp->dentry);
4128 css_get(css->parent);4128 css_get(css->parent);
@@ -4138,8 +4138,11 @@ static int create_css(struct cgroup *cgrp, struct cgroup_subsys *ss) · 9 unmodified lines
4138 4138
4139 return 0;4139 return 0;
4140 4140
4141err_free:4141err_clear_dir:
4142 cgroup_clear_dir(css->cgroup, 1 << css->ss->subsys_id);
4143err_free_percpu_ref:
4142 percpu_ref_cancel_init(&css->refcnt);4144 percpu_ref_cancel_init(&css->refcnt);
4145err_free_css:
4143 ss->css_free(css);4146 ss->css_free(css);
4144 return err;4147 return err;
4145}4148}