On Mon, Sep 13, 2021 at 02:43:44PM -0400, Waiman Long wrote:
So, I don't think this would be correct. It is assumed that there are noThe problem with percpu_ref_is_dying() is the fact that it becomes trueSomething like
after percpu_ref_exit() is called in css_free_rwork_fn() which has an
RCU delay. If you want to catch the fact that kill_css() has been
called, we can check the CSS_DYING flag which is set in kill_css() by
commit 33c35aa481786 ("cgroup: Prevent kill_css() from being called more
than once"). Will that be an acceptable alternative?
diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
index 881ce1470beb..851e54800ad8 100644
--- a/kernel/cgroup/cgroup.c
+++ b/kernel/cgroup/cgroup.c
@@ -3140,6 +3140,9 @@ static void cgroup_apply_control_disable(struct cgroup
*cg
if (!css)
continue;
+ if (css->flags & CSS_DYING)
+ continue;
+
dying csses when control reaches this point. The right fix is making sure
that remount path clears up dying csses before calling into this path.