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

Oleg Nesterov posted 2 patches 2 years, 3 months ago
[PATCH 1/2] change thread_group_empty() to use task_struct->thread_node
Posted by Oleg Nesterov 2 years, 3 months ago
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@redhat.com>
---
 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