diff options
| author | Oleg Nesterov <oleg@redhat.com> | 2014-12-11 02:45:18 +0300 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-12-11 04:41:09 +0300 | 
| commit | abdba6e9ea6d3903c2b0618db720e17b3c1c705c (patch) | |
| tree | e7abd260e00ff1efaabaf63e459a7a64858be887 /fs/proc/array.c | |
| parent | b0fafc11115938a3215723f37e8e9cc6a94b05b0 (diff) | |
| download | linux-abdba6e9ea6d3903c2b0618db720e17b3c1c705c.tar.xz | |
proc: task_state: ptrace_parent() doesn't need pid_alive() check
p->ptrace != 0 means that release_task(p) was not called, so pid_alive()
buys nothing and we can remove this check.  Other callers already use it
directly without additional checks.
Note: with or without this patch ptrace_parent() can return the pointer to
the freed task, this will be explained/fixed later.
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Cc: Aaron Tomlin <atomlin@redhat.com>
Cc: Alexey Dobriyan <adobriyan@gmail.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>,
Cc: Sterling Alexander <stalexan@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Roland McGrath <roland@hack.frob.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/proc/array.c')
| -rw-r--r-- | fs/proc/array.c | 13 | 
1 files changed, 6 insertions, 7 deletions
| diff --git a/fs/proc/array.c b/fs/proc/array.c index 800e30f8f284..bd117d065b82 100644 --- a/fs/proc/array.c +++ b/fs/proc/array.c @@ -157,19 +157,18 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns,  	struct user_namespace *user_ns = seq_user_ns(m);  	struct group_info *group_info;  	int g; +	struct task_struct *tracer;  	const struct cred *cred; -	pid_t ppid, tpid, tgid, ngid; +	pid_t ppid, tpid = 0, tgid, ngid;  	unsigned int max_fds = 0;  	rcu_read_lock();  	ppid = pid_alive(p) ?  		task_tgid_nr_ns(rcu_dereference(p->real_parent), ns) : 0; -	tpid = 0; -	if (pid_alive(p)) { -		struct task_struct *tracer = ptrace_parent(p); -		if (tracer) -			tpid = task_pid_nr_ns(tracer, ns); -	} + +	tracer = ptrace_parent(p); +	if (tracer) +		tpid = task_pid_nr_ns(tracer, ns);  	tgid = task_tgid_nr_ns(p, ns);  	ngid = task_numa_group_id(p); | 
