From: Tejun Heo <tj@kernel.org>
To: "Michal Koutný" <mkoutny@suse.com>
Cc: cgroups@vger.kernel.org, linux-kernel@vger.kernel.org,
Dan Schatzberg <dschatzberg@meta.com>,
Peter Zijlstra <peterz@infradead.org>,
stable@vger.kernel.org, Noah Elias Feldt <N.Feldt@mittwald.de>,
Salvatore Bonaccorso <carnil@debian.org>,
Johannes Weiner <hannes@cmpxchg.org>
Subject: Re: [PATCH] cgroup: Avoid iteration of dying tasks with zero refcount
Date: Wed, 2 Sep 2026 08:59:39 -1000 [thread overview]
Message-ID: <aphyG4kapy2MBcnH@slm.duckdns.org> (raw)
In-Reply-To: <20260902161653.1051794-1-mkoutny@suse.com>
How about something like the following? It's more in line with other skips
and the resulting behavior should remain the same as before:
--- a/kernel/cgroup/cgroup.c
+++ b/kernel/cgroup/cgroup.c
@@ -5215,6 +5215,7 @@
*/
struct task_struct *css_task_iter_next(struct css_task_iter *it)
{
+ struct task_struct *task;
unsigned long irqflags;
if (it->cur_task) {
@@ -5228,6 +5229,21 @@
if (it->flags & CSS_TASK_ITER_SKIPPED)
css_task_iter_advance(it);
+ /*
+ * @it->task_pos was picked on an earlier call. A dying leader stays on
+ * dying_tasks until cgroup_task_free(), past its last usage ref drop,
+ * so it may have been reaped since and get_task_struct() on it would
+ * resurrect a task about to be freed. That last ref is dropped by an
+ * RCU callback queued from release_task(), after signal->live hit zero,
+ * so a leader still showing live threads in this irq-disabled section
+ * can't lose its ref before the section ends.
+ */
+ if (it->task_pos && it->cur_tasks_head == &it->cur_cset->dying_tasks) {
+ task = list_entry(it->task_pos, struct task_struct, cg_list);
+ if (!atomic_read(&task->signal->live))
+ css_task_iter_advance(it);
+ }
+
if (it->task_pos) {
it->cur_task = list_entry(it->task_pos, struct task_struct,
cg_list);
next prev parent reply other threads:[~2026-09-02 18:59 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-02 16:16 [PATCH] cgroup: Avoid iteration of dying tasks with zero refcount Michal Koutný
2026-09-02 18:59 ` Tejun Heo [this message]
2026-09-03 20:07 ` Salvatore Bonaccorso
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aphyG4kapy2MBcnH@slm.duckdns.org \
--to=tj@kernel.org \
--cc=N.Feldt@mittwald.de \
--cc=carnil@debian.org \
--cc=cgroups@vger.kernel.org \
--cc=dschatzberg@meta.com \
--cc=hannes@cmpxchg.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mkoutny@suse.com \
--cc=peterz@infradead.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox