Re: [PATCH] cgroup: don't queue css_release_work if one already pending

From: Tadeusz Struk
Date: Thu May 19 2022 - 19:26:59 EST


On 5/19/22 04:23, Hillf Danton wrote:
On Wed, 18 May 2022 09:48:21 -0700 Tadeusz Struk wrote:
On 4/22/22 04:05, Michal Koutny wrote:
On Thu, Apr 21, 2022 at 02:00:56PM -1000, Tejun Heo<tj@xxxxxxxxxx> wrote:
If this is the case, we need to hold an extra reference to be put by the
css_killed_work_fn(), right?
That put could trigger INIT_WORK in css_release() and warning [1]
on init active (active state 0) object OTOH as the same
css->destroy_work is used in both kill and release pathes.

Will this help if there would be two WQs, one for the css_release path
and one for the rcu_work?

diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
index adb820e98f24..a4873b33e488 100644
--- a/kernel/cgroup/cgroup.c
+++ b/kernel/cgroup/cgroup.c
@@ -124,6 +124,7 @@ DEFINE_PERCPU_RWSEM(cgroup_threadgroup_rwsem);
* which may lead to deadlock.
*/
static struct workqueue_struct *cgroup_destroy_wq;
+static struct workqueue_struct *cgroup_destroy_rcu_wq;
/* generate an array of cgroup subsystem pointers */
#define SUBSYS(_x) [_x ## _cgrp_id] = &_x ## _cgrp_subsys,

--
Thanks,
Tadeusz