[RFC PATCH bpf-next 1/8] cgroup: Don't have to hold cgroup_mutex in task_cgroup_from_root()

Yafang Shao
2023-10-07T14:03:19Z

The task cannot modify cgroups if we have already acquired the
css_set_lock, thus eliminating the need to hold the cgroup_mutex. Following
this change, task_cgroup_from_root() can be employed in non-sleepable contexts.

Signed-off-by: Yafang Shao <laoar.shao@gmail.com>
---
kernel/cgroup/cgroup.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
index 1fb7f562289d..bd1692f48be5 100644
--- a/kernel/cgroup/cgroup.c
+++ b/kernel/cgroup/cgroup.c
@@ -1453,7 +1453,7 @@ static struct cgroup *cset_cgroup_from_root(struct css_set *cset,

/*
* Return the cgroup for "task" from the given hierarchy. Must be
- * called with cgroup_mutex and css_set_lock held.
+ * called with css_set_lock held.
*/
struct cgroup *task_cgroup_from_root(struct task_struct *task,
struct cgroup_root *root)
@@ -1462,7 +1462,8 @@ struct cgroup *task_cgroup_from_root(struct task_struct *task,
* No need to lock the task - since we hold css_set_lock the
* task can't change groups.
*/
- return cset_cgroup_from_root(task_css_set(task), root);
+ lockdep_assert_held(&css_set_lock);
+ return __cset_cgroup_from_root(task_css_set(task), root);
}

/*
--
2.30.1 (Apple Git-130)