diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/cgroup.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/kernel/cgroup.c b/kernel/cgroup.c index a0c6af34d500..0f3527d6184a 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c | |||
| @@ -5132,7 +5132,7 @@ EXPORT_SYMBOL_GPL(css_depth); | |||
| 5132 | * @root: the css supporsed to be an ancestor of the child. | 5132 | * @root: the css supporsed to be an ancestor of the child. |
| 5133 | * | 5133 | * |
| 5134 | * Returns true if "root" is an ancestor of "child" in its hierarchy. Because | 5134 | * Returns true if "root" is an ancestor of "child" in its hierarchy. Because |
| 5135 | * this function reads css->id, this use rcu_dereference() and rcu_read_lock(). | 5135 | * this function reads css->id, the caller must hold rcu_read_lock(). |
| 5136 | * But, considering usual usage, the csses should be valid objects after test. | 5136 | * But, considering usual usage, the csses should be valid objects after test. |
| 5137 | * Assuming that the caller will do some action to the child if this returns | 5137 | * Assuming that the caller will do some action to the child if this returns |
| 5138 | * returns true, the caller must take "child";s reference count. | 5138 | * returns true, the caller must take "child";s reference count. |
| @@ -5144,18 +5144,18 @@ bool css_is_ancestor(struct cgroup_subsys_state *child, | |||
| 5144 | { | 5144 | { |
| 5145 | struct css_id *child_id; | 5145 | struct css_id *child_id; |
| 5146 | struct css_id *root_id; | 5146 | struct css_id *root_id; |
| 5147 | bool ret = true; | ||
| 5148 | 5147 | ||
| 5149 | rcu_read_lock(); | ||
| 5150 | child_id = rcu_dereference(child->id); | 5148 | child_id = rcu_dereference(child->id); |
| 5149 | if (!child_id) | ||
| 5150 | return false; | ||
| 5151 | root_id = rcu_dereference(root->id); | 5151 | root_id = rcu_dereference(root->id); |
| 5152 | if (!child_id | 5152 | if (!root_id) |
| 5153 | || !root_id | 5153 | return false; |
| 5154 | || (child_id->depth < root_id->depth) | 5154 | if (child_id->depth < root_id->depth) |
| 5155 | || (child_id->stack[root_id->depth] != root_id->id)) | 5155 | return false; |
| 5156 | ret = false; | 5156 | if (child_id->stack[root_id->depth] != root_id->id) |
| 5157 | rcu_read_unlock(); | 5157 | return false; |
| 5158 | return ret; | 5158 | return true; |
| 5159 | } | 5159 | } |
| 5160 | 5160 | ||
| 5161 | void free_css_id(struct cgroup_subsys *ss, struct cgroup_subsys_state *css) | 5161 | void free_css_id(struct cgroup_subsys *ss, struct cgroup_subsys_state *css) |
