summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuopeng Zhang <zhangguopeng@kylinos.cn>2026-09-24 17:15:36 +0800
committerTejun Heo <tj@kernel.org>2026-09-24 06:22:11 -1000
commit1765a153d985c231357145e26798f9408db10e42 (patch)
tree912bac6b31e58ac675a62df8ba0064b2d13cdddc
parentc774ec8f0a5d02a06d34c27f5a7de7e333b91265 (diff)
downloadlinux-stable-1765a153d985c231357145e26798f9408db10e42.tar.gz
linux-stable-1765a153d985c231357145e26798f9408db10e42.zip
cgroup/pids: Restore pids.events notifications in local mode
A fork rejected by the pids controller increments the counter reported by pids.events. When local event accounting is selected, however, pids_event() returns after notifying only events_local_file, leaving pids.events pollers asleep. On legacy hierarchies, pids.events.local does not exist. With pids_localevents, pids.events reports the same local counter. In both cases, pids.events changes without generating a notification. This can be reproduced with a pids_localevents mount: mkdir /tmp/test mount -t cgroup2 -o pids_localevents none /tmp/test mkdir /tmp/test/t echo 1 > /tmp/test/t/pids.max cat /tmp/test/t/pids.events # max 0 timeout 3 inotifywait -e modify /tmp/test/t/pids.events & sh -c 'echo $$ > /tmp/test/t/cgroup.procs; (true &)' 2>/dev/null wait cat /tmp/test/t/pids.events # max 1 Without this patch, inotifywait times out without reporting an event. Notify pids.events before returning from the local event path. Fixes: 3f26a885a068 ("cgroup/pids: Add pids.events.local") Cc: stable@vger.kernel.org # v6.11+ Signed-off-by: Guopeng Zhang <zhangguopeng@kylinos.cn> Signed-off-by: Tejun Heo <tj@kernel.org>
-rw-r--r--kernel/cgroup/pids.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/kernel/cgroup/pids.c b/kernel/cgroup/pids.c
index ecbb839d2..78cdc0558 100644
--- a/kernel/cgroup/pids.c
+++ b/kernel/cgroup/pids.c
@@ -253,6 +253,11 @@ static void pids_event(struct pids_cgroup *pids_forking,
}
if (!cgroup_subsys_on_dfl(pids_cgrp_subsys) ||
cgrp_dfl_root.flags & CGRP_ROOT_PIDS_LOCAL_EVENTS) {
+ /*
+ * pids.events reports the local counter on legacy hierarchies
+ * and when pids_localevents is enabled.
+ */
+ cgroup_file_notify(&p->events_file);
cgroup_file_notify(&p->events_local_file);
return;
}