diff options
Diffstat (limited to 'fs/proc/array.c')
| -rw-r--r-- | fs/proc/array.c | 9 | 
1 files changed, 8 insertions, 1 deletions
| diff --git a/fs/proc/array.c b/fs/proc/array.c index ff869a66b34e..fd8b0c12b2cb 100644 --- a/fs/proc/array.c +++ b/fs/proc/array.c @@ -92,6 +92,7 @@  #include <linux/string_helpers.h>  #include <linux/user_namespace.h>  #include <linux/fs_struct.h> +#include <linux/kthread.h>  #include <asm/processor.h>  #include "internal.h" @@ -102,6 +103,8 @@ void proc_task_name(struct seq_file *m, struct task_struct *p, bool escape)  	if (p->flags & PF_WQ_WORKER)  		wq_worker_comm(tcomm, sizeof(tcomm), p); +	else if (p->flags & PF_KTHREAD) +		get_kthread_comm(tcomm, sizeof(tcomm), p);  	else  		__get_task_comm(tcomm, sizeof(tcomm), p); @@ -468,6 +471,7 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,  	u64 cgtime, gtime;  	unsigned long rsslim = 0;  	unsigned long flags; +	int exit_code = task->exit_code;  	state = *get_task_state(task);  	vsize = eip = esp = 0; @@ -531,6 +535,9 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,  			maj_flt += sig->maj_flt;  			thread_group_cputime_adjusted(task, &utime, &stime);  			gtime += sig->gtime; + +			if (sig->flags & (SIGNAL_GROUP_EXIT | SIGNAL_STOP_STOPPED)) +				exit_code = sig->group_exit_code;  		}  		sid = task_session_nr_ns(task, ns); @@ -630,7 +637,7 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,  		seq_puts(m, " 0 0 0 0 0 0 0");  	if (permitted) -		seq_put_decimal_ll(m, " ", task->exit_code); +		seq_put_decimal_ll(m, " ", exit_code);  	else  		seq_puts(m, " 0"); | 
