|
@@ -193,12 +193,20 @@ static int workqueue_stat_show(struct seq_file *s, void *p)
|
|
|
struct cpu_workqueue_stats *cws = p;
|
|
|
unsigned long flags;
|
|
|
int cpu = cws->cpu;
|
|
|
- struct task_struct *tsk = find_task_by_vpid(cws->pid);
|
|
|
-
|
|
|
- seq_printf(s, "%3d %6d %6u %s\n", cws->cpu,
|
|
|
- atomic_read(&cws->inserted),
|
|
|
- cws->executed,
|
|
|
- tsk ? tsk->comm : "<...>");
|
|
|
+ struct pid *pid;
|
|
|
+ struct task_struct *tsk;
|
|
|
+
|
|
|
+ pid = find_get_pid(cws->pid);
|
|
|
+ if (pid) {
|
|
|
+ tsk = get_pid_task(pid, PIDTYPE_PID);
|
|
|
+ if (tsk) {
|
|
|
+ seq_printf(s, "%3d %6d %6u %s\n", cws->cpu,
|
|
|
+ atomic_read(&cws->inserted), cws->executed,
|
|
|
+ tsk->comm);
|
|
|
+ put_task_struct(tsk);
|
|
|
+ }
|
|
|
+ put_pid(pid);
|
|
|
+ }
|
|
|
|
|
|
spin_lock_irqsave(&workqueue_cpu_stat(cpu)->lock, flags);
|
|
|
if (&cws->list == workqueue_cpu_stat(cpu)->list.next)
|