diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2017-09-26 19:45:33 +0200 |
---|---|---|
committer | Eric W. Biederman <ebiederm@xmission.com> | 2018-07-21 17:43:12 +0200 |
commit | 7a36094d61bfe9843de5484ff0140227983ac5d5 (patch) | |
tree | 7ebb9918a753ad3b0c8cd4ed128e7a99c3dd2f99 /kernel/pid.c | |
parent | pids: Move task_pid_type into sched/signal.h (diff) | |
download | linux-7a36094d61bfe9843de5484ff0140227983ac5d5.tar.xz linux-7a36094d61bfe9843de5484ff0140227983ac5d5.zip |
pids: Compute task_tgid using signal->leader_pid
The cost is the the same and this removes the need
to worry about complications that come from de_thread
and group_leader changing.
__task_pid_nr_ns has been updated to take advantage of this change.
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Diffstat (limited to 'kernel/pid.c')
-rw-r--r-- | kernel/pid.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/kernel/pid.c b/kernel/pid.c index 157fe4b19971..d0de2b59f86f 100644 --- a/kernel/pid.c +++ b/kernel/pid.c @@ -421,13 +421,14 @@ pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type, if (!ns) ns = task_active_pid_ns(current); if (likely(pid_alive(task))) { - if (type != PIDTYPE_PID) { - if (type == __PIDTYPE_TGID) - type = PIDTYPE_PID; - - task = task->group_leader; - } - nr = pid_nr_ns(rcu_dereference(task->pids[type].pid), ns); + struct pid *pid; + if (type == PIDTYPE_PID) + pid = task_pid(task); + else if (type == __PIDTYPE_TGID) + pid = task_tgid(task); + else + pid = rcu_dereference(task->group_leader->pids[type].pid); + nr = pid_nr_ns(pid, ns); } rcu_read_unlock(); |