Skip to contentSkip to conversation

cgroup/pids: Restore pids.events notifications in local mode

PATCH Applied Guopeng Zhang 2 participants 2 messages Sep 24 cgroup

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 cgroup/pids: Restore pids.events notifications in local mode

From: Guopeng Zhang <[email protected]>

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")
---
 kernel/cgroup/pids.c | 5 +++++
 1 file changed, 5 insertions(+)
kernel/cgroup/pids.c +5 -0
index ecbb839d2acb..8444e270554a 100644
@@ -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;
 	}
Signature · 1 line
2.43.0
maintainer Applied
#1 lore raw

Applied to cgroup/for-7.3-fixes with the comment rewrapped and stable cc'd.

Thanks.

--
tejun