mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-06 09:04:22 -04:00
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" <ebiederm@xmission.com>
This commit is contained in:
@@ -1176,7 +1176,6 @@ static int de_thread(struct task_struct *tsk)
|
||||
tsk->start_boottime = leader->start_boottime;
|
||||
|
||||
BUG_ON(!same_thread_group(leader, tsk));
|
||||
BUG_ON(has_group_leader_pid(tsk));
|
||||
/*
|
||||
* An exec() starts a new thread group with the
|
||||
* TGID of the previous thread group. Rehash the
|
||||
|
||||
@@ -654,17 +654,6 @@ static inline bool thread_group_leader(struct task_struct *p)
|
||||
return p->exit_signal >= 0;
|
||||
}
|
||||
|
||||
/* Do to the insanities of de_thread it is possible for a process
|
||||
* to have the pid of the thread group leader without actually being
|
||||
* the thread group leader. For iteration through the pids in proc
|
||||
* all we care about is that we have a task with the appropriate
|
||||
* pid, we don't actually care if we have the right task.
|
||||
*/
|
||||
static inline bool has_group_leader_pid(struct task_struct *p)
|
||||
{
|
||||
return task_pid(p) == task_tgid(p);
|
||||
}
|
||||
|
||||
static inline
|
||||
bool same_thread_group(struct task_struct *p1, struct task_struct *p2)
|
||||
{
|
||||
|
||||
@@ -66,23 +66,18 @@ static struct task_struct *lookup_task(const pid_t pid, bool thread,
|
||||
if (thread)
|
||||
return same_thread_group(p, current) ? p : NULL;
|
||||
|
||||
if (gettime) {
|
||||
/*
|
||||
* For clock_gettime(PROCESS) the task does not need to be
|
||||
* the actual group leader. tsk->sighand gives
|
||||
* access to the group's clock.
|
||||
*
|
||||
* Timers need the group leader because they take a
|
||||
* reference on it and store the task pointer until the
|
||||
* timer is destroyed.
|
||||
*/
|
||||
return (p == current || thread_group_leader(p)) ? p : NULL;
|
||||
}
|
||||
/*
|
||||
* For clock_gettime(PROCESS) the task does not need to be
|
||||
* the actual group leader. task->signal gives
|
||||
* access to the group's clock.
|
||||
*/
|
||||
if (gettime && (p == current))
|
||||
return p;
|
||||
|
||||
/*
|
||||
* For processes require that p is group leader.
|
||||
*/
|
||||
return has_group_leader_pid(p) ? p : NULL;
|
||||
return thread_group_leader(p) ? p : NULL;
|
||||
}
|
||||
|
||||
static struct task_struct *__get_task_for_clock(const clockid_t clock,
|
||||
|
||||
Reference in New Issue
Block a user