aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/cgroup_freezer.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/cgroup_freezer.c')
-rw-r--r--kernel/cgroup_freezer.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/kernel/cgroup_freezer.c b/kernel/cgroup_freezer.c
index 660590710409..fb249e2bcada 100644
--- a/kernel/cgroup_freezer.c
+++ b/kernel/cgroup_freezer.c
@@ -192,6 +192,13 @@ static void freezer_fork(struct cgroup_subsys *ss, struct task_struct *task)
192 */ 192 */
193 freezer = task_freezer(task); 193 freezer = task_freezer(task);
194 194
195 /*
196 * The root cgroup is non-freezable, so we can skip the
197 * following check.
198 */
199 if (!freezer->css.cgroup->parent)
200 return;
201
195 spin_lock_irq(&freezer->lock); 202 spin_lock_irq(&freezer->lock);
196 BUG_ON(freezer->state == CGROUP_FROZEN); 203 BUG_ON(freezer->state == CGROUP_FROZEN);
197 204
@@ -335,7 +342,7 @@ static int freezer_write(struct cgroup *cgroup,
335 else if (strcmp(buffer, freezer_state_strs[CGROUP_FROZEN]) == 0) 342 else if (strcmp(buffer, freezer_state_strs[CGROUP_FROZEN]) == 0)
336 goal_state = CGROUP_FROZEN; 343 goal_state = CGROUP_FROZEN;
337 else 344 else
338 return -EIO; 345 return -EINVAL;
339 346
340 if (!cgroup_lock_live_group(cgroup)) 347 if (!cgroup_lock_live_group(cgroup))
341 return -ENODEV; 348 return -ENODEV;
@@ -354,6 +361,8 @@ static struct cftype files[] = {
354 361
355static int freezer_populate(struct cgroup_subsys *ss, struct cgroup *cgroup) 362static int freezer_populate(struct cgroup_subsys *ss, struct cgroup *cgroup)
356{ 363{
364 if (!cgroup->parent)
365 return 0;
357 return cgroup_add_files(cgroup, ss, files, ARRAY_SIZE(files)); 366 return cgroup_add_files(cgroup, ss, files, ARRAY_SIZE(files));
358} 367}
359 368