[PATCH 1/2] change thread_group_empty() to use task_struct->thread_node

From: Oleg Nesterov
Date: Sat Aug 26 2023 - 07:16:41 EST


It could use list_is_singular() but this way it is cheaper. Plus the
thread_group_leader() check makes it clear that thread_group_empty()
can only return true if p is a group leader. This was not immediately
obvious before this patch.

task_struct->thread_group no longer has users, it can die.

Signed-off-by: Oleg Nesterov <oleg@xxxxxxxxxx>
---
include/linux/sched/signal.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/include/linux/sched/signal.h b/include/linux/sched/signal.h
index cffc882d367f..d7fa3ca2fa53 100644
--- a/include/linux/sched/signal.h
+++ b/include/linux/sched/signal.h
@@ -733,7 +733,8 @@ static inline struct task_struct *next_thread(struct task_struct *p)

static inline int thread_group_empty(struct task_struct *p)
{
- return list_empty(&p->thread_group);
+ return thread_group_leader(p) &&
+ list_is_last(&p->thread_node, &p->signal->thread_head);
}

#define delay_group_leader(p) \
--
2.25.1.362.g51ebf55