Skip to content

Commit 06576ed

Browse files
committed
Removing has_group_leader_pid
With de_thread now calling exchange_tids has_group_leader_pid no longer makes any sense and is equivalent to calling thread_group_leader. As there are only 2 remaining users of has_group_leader_pid let's update the code and get rid of has_group_leader_pid. There is one extra patch to lookup_task that performs that unifies to code paths that become identical when has_group_leader_pid went away. Eric W. Biederman (4): posix-cpu-timer: Tidy up group_leader logic in lookup_task posix-cpu-timer: Unify the now redundant code in lookup_task exec: Remove BUG_ON(has_group_leader_pid) signal: Remove has_group_leader_pid fs/exec.c | 1 - include/linux/sched/signal.h | 11 ----------- kernel/time/posix-cpu-timers.c | 21 ++++++++------------- 3 files changed, 8 insertions(+), 25 deletions(-) Signed-off-by: "Eric W. Biederman" <[email protected]>
2 parents 5071228 + bbd40fc commit 06576ed

File tree

3 files changed

+8
-25
lines changed

3 files changed

+8
-25
lines changed

fs/exec.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1176,7 +1176,6 @@ static int de_thread(struct task_struct *tsk)
11761176
tsk->start_boottime = leader->start_boottime;
11771177

11781178
BUG_ON(!same_thread_group(leader, tsk));
1179-
BUG_ON(has_group_leader_pid(tsk));
11801179
/*
11811180
* An exec() starts a new thread group with the
11821181
* TGID of the previous thread group. Rehash the

include/linux/sched/signal.h

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -654,17 +654,6 @@ static inline bool thread_group_leader(struct task_struct *p)
654654
return p->exit_signal >= 0;
655655
}
656656

657-
/* Do to the insanities of de_thread it is possible for a process
658-
* to have the pid of the thread group leader without actually being
659-
* the thread group leader. For iteration through the pids in proc
660-
* all we care about is that we have a task with the appropriate
661-
* pid, we don't actually care if we have the right task.
662-
*/
663-
static inline bool has_group_leader_pid(struct task_struct *p)
664-
{
665-
return task_pid(p) == task_tgid(p);
666-
}
667-
668657
static inline
669658
bool same_thread_group(struct task_struct *p1, struct task_struct *p2)
670659
{

kernel/time/posix-cpu-timers.c

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -66,23 +66,18 @@ static struct task_struct *lookup_task(const pid_t pid, bool thread,
6666
if (thread)
6767
return same_thread_group(p, current) ? p : NULL;
6868

69-
if (gettime) {
70-
/*
71-
* For clock_gettime(PROCESS) the task does not need to be
72-
* the actual group leader. tsk->sighand gives
73-
* access to the group's clock.
74-
*
75-
* Timers need the group leader because they take a
76-
* reference on it and store the task pointer until the
77-
* timer is destroyed.
78-
*/
79-
return (p == current || thread_group_leader(p)) ? p : NULL;
80-
}
69+
/*
70+
* For clock_gettime(PROCESS) the task does not need to be
71+
* the actual group leader. task->signal gives
72+
* access to the group's clock.
73+
*/
74+
if (gettime && (p == current))
75+
return p;
8176

8277
/*
8378
* For processes require that p is group leader.
8479
*/
85-
return has_group_leader_pid(p) ? p : NULL;
80+
return thread_group_leader(p) ? p : NULL;
8681
}
8782

8883
static struct task_struct *__get_task_for_clock(const clockid_t clock,

0 commit comments

Comments
 (0)