diff options
Diffstat (limited to 'kernel/cgroup_freezer.c')
| -rw-r--r-- | kernel/cgroup_freezer.c | 10 | 
1 files changed, 7 insertions, 3 deletions
diff --git a/kernel/cgroup_freezer.c b/kernel/cgroup_freezer.c index 59e9ef6aab4..da5e1397553 100644 --- a/kernel/cgroup_freezer.c +++ b/kernel/cgroup_freezer.c @@ -15,6 +15,7 @@   */  #include <linux/module.h> +#include <linux/slab.h>  #include <linux/cgroup.h>  #include <linux/fs.h>  #include <linux/uaccess.h> @@ -47,17 +48,20 @@ static inline struct freezer *task_freezer(struct task_struct *task)  			    struct freezer, css);  } -int cgroup_frozen(struct task_struct *task) +int cgroup_freezing_or_frozen(struct task_struct *task)  {  	struct freezer *freezer;  	enum freezer_state state;  	task_lock(task);  	freezer = task_freezer(task); -	state = freezer->state; +	if (!freezer->css.cgroup->parent) +		state = CGROUP_THAWED; /* root cgroup can't be frozen */ +	else +		state = freezer->state;  	task_unlock(task); -	return state == CGROUP_FROZEN; +	return (state == CGROUP_FREEZING) || (state == CGROUP_FROZEN);  }  /*  |