]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
cgroup: Fix incorrect WARN_ON_ONCE() in css_release_work_fn()
authorWaiman Long <longman@redhat.com>
Fri, 9 Aug 2024 03:22:59 +0000 (23:22 -0400)
committerTejun Heo <tj@kernel.org>
Fri, 9 Aug 2024 16:35:29 +0000 (06:35 -1000)
It turns out that the WARN_ON_ONCE() call in css_release_work_fn
introduced by commit ab0312526867 ("cgroup: Show # of subsystem CSSes
in cgroup.stat") is incorrect. Although css->nr_descendants must be
0 when a css is released and ready to be freed, the corresponding
cgrp->nr_dying_subsys[ss->id] may not be 0 if a subsystem is activated
and deactivated multiple times with one or more of its previous
activation leaving behind dying csses.

Fix the incorrect warning by removing the cgrp->nr_dying_subsys check.

Fixes: ab0312526867 ("cgroup: Show # of subsystem CSSes in cgroup.stat")
Closes: https://lore.kernel.org/cgroups/6f301773-2fce-4602-a391-8af7ef00b2fb@redhat.com/T/#t
Signed-off-by: Waiman Long <longman@redhat.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/cgroup/cgroup.c

index 601600afdd2024d8f18a161707f3b3a09cffb722..244ec600b4d87f02348344857c4ba96be6b2b7a9 100644 (file)
@@ -5465,7 +5465,14 @@ static void css_release_work_fn(struct work_struct *work)
                        ss->css_released(css);
 
                cgrp->nr_dying_subsys[ss->id]--;
-               WARN_ON_ONCE(css->nr_descendants || cgrp->nr_dying_subsys[ss->id]);
+               /*
+                * When a css is released and ready to be freed, its
+                * nr_descendants must be zero. However, the corresponding
+                * cgrp->nr_dying_subsys[ss->id] may not be 0 if a subsystem
+                * is activated and deactivated multiple times with one or
+                * more of its previous activation leaving behind dying csses.
+                */
+               WARN_ON_ONCE(css->nr_descendants);
                parent_cgrp = cgroup_parent(cgrp);
                while (parent_cgrp) {
                        parent_cgrp->nr_dying_subsys[ss->id]--;