|
@@ -758,25 +758,15 @@ static void cgroup_destroy_root(struct cgroupfs_root *root)
|
|
|
cgroup_free_root(root);
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * Return the cgroup for "task" from the given hierarchy. Must be
|
|
|
- * called with cgroup_mutex and css_set_rwsem held.
|
|
|
- */
|
|
|
-static struct cgroup *task_cgroup_from_root(struct task_struct *task,
|
|
|
+/* look up cgroup associated with given css_set on the specified hierarchy */
|
|
|
+static struct cgroup *cset_cgroup_from_root(struct css_set *cset,
|
|
|
struct cgroupfs_root *root)
|
|
|
{
|
|
|
- struct css_set *cset;
|
|
|
struct cgroup *res = NULL;
|
|
|
|
|
|
lockdep_assert_held(&cgroup_mutex);
|
|
|
lockdep_assert_held(&css_set_rwsem);
|
|
|
|
|
|
- /*
|
|
|
- * No need to lock the task - since we hold cgroup_mutex the
|
|
|
- * task can't change groups, so the only thing that can happen
|
|
|
- * is that it exits and its css is set back to init_css_set.
|
|
|
- */
|
|
|
- cset = task_css_set(task);
|
|
|
if (cset == &init_css_set) {
|
|
|
res = &root->top_cgroup;
|
|
|
} else {
|
|
@@ -796,6 +786,21 @@ static struct cgroup *task_cgroup_from_root(struct task_struct *task,
|
|
|
return res;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * Return the cgroup for "task" from the given hierarchy. Must be
|
|
|
+ * called with cgroup_mutex and css_set_rwsem held.
|
|
|
+ */
|
|
|
+static struct cgroup *task_cgroup_from_root(struct task_struct *task,
|
|
|
+ struct cgroupfs_root *root)
|
|
|
+{
|
|
|
+ /*
|
|
|
+ * No need to lock the task - since we hold cgroup_mutex the
|
|
|
+ * task can't change groups, so the only thing that can happen
|
|
|
+ * is that it exits and its css is set back to init_css_set.
|
|
|
+ */
|
|
|
+ return cset_cgroup_from_root(task_css_set(task), root);
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* There is one global cgroup mutex. We also require taking
|
|
|
* task_lock() when dereferencing a task's cgroup subsys pointers.
|