summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2026-09-14 12:46:22 -1000
committerTejun Heo <tj@kernel.org>2026-09-14 12:46:22 -1000
commit02f890299bd9a8de7d4a83aecb4a882ea98fc70e (patch)
tree582f2f6a1d81ba5acc92d4ea8f4db2e231af21b6
parente8f69fe59a104b4a97a3365dbb43c72996c2acde (diff)
parent057dac23d329d5c5ed62352f2659a39fd46c6d4a (diff)
downloadlinux-next-02f890299bd9a8de7d4a83aecb4a882ea98fc70e.tar.gz
linux-next-02f890299bd9a8de7d4a83aecb4a882ea98fc70e.zip
Merge branch 'for-7.3-fixes' into for-next
-rw-r--r--kernel/cgroup/cgroup.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
index 16c0362330ac..804318ae160e 100644
--- a/kernel/cgroup/cgroup.c
+++ b/kernel/cgroup/cgroup.c
@@ -5321,10 +5321,13 @@ struct task_struct *css_task_iter_next(struct css_task_iter *it)
if (it->flags & CSS_TASK_ITER_SKIPPED)
css_task_iter_advance(it);
- if (it->task_pos) {
+ while (it->task_pos && !it->cur_task) {
it->cur_task = list_entry(it->task_pos, struct task_struct,
cg_list);
- get_task_struct(it->cur_task);
+ /* a task on dying_tasks with zero refcount is only valid for
+ * RCU readers, not even interesting for
+ * CSS_TASK_ITER_WITH_DEAD, find another one */
+ it->cur_task = tryget_task_struct(it->cur_task);
css_task_iter_advance(it);
}