Messages in this thread | ![/](/images/icornerl.gif) | | Date | Fri, 20 Jan 2023 14:09:33 +0100 | From | Petr Mladek <> | Subject | Re: [PATCH v2] sched: print parent comm in sched_show_task() |
| |
On Thu 2023-01-19 19:06:42, Tio Zhang wrote: > Knowing who the parent is might be useful for debugging. > For example, we can sometimes resolve kernel hung tasks by stopping > the person who begins those hung tasks. > With the parent's name printed in sched_show_task(), > it might be helpful to let people know which "service" should be operated. > Also, we move the parent info to a following new line while keeping the > original line the same. > And we would print "parent:unknown ppid:<NULL>" > when the task is not alive. > > Signed-off-by: Tio Zhang <tiozhang@didiglobal.com> > --- > kernel/sched/core.c | 14 ++++++++++++-- > 1 file changed, 12 insertions(+), 2 deletions(-) > > diff --git a/kernel/sched/core.c b/kernel/sched/core.c > index cb2aa2b54c7a..5690a5700f9e 100644 > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -8854,6 +8854,7 @@ void sched_show_task(struct task_struct *p) > { > unsigned long free = 0; > int ppid; > + char *pcomm = NULL; > > if (!try_get_task_stack(p)) > return; > @@ -8867,13 +8868,22 @@ void sched_show_task(struct task_struct *p) > #endif > ppid = 0; > rcu_read_lock(); > - if (pid_alive(p)) > - ppid = task_pid_nr(rcu_dereference(p->real_parent)); > + if (pid_alive(p)) { > + struct task_struct *parent = rcu_dereference(p->real_parent); > + > + ppid = task_pid_nr(parent); > + pcomm = parent->comm; > + } > rcu_read_unlock(); > pr_cont(" stack:%-5lu pid:%-5d ppid:%-6d flags:0x%08lx\n", > free, task_pid_nr(p), ppid,
This prints "ppid:0" when pid_alive() returns false.
> read_task_thread_flags(p)); > > + if (!ppid) > + pr_info("parent:unknown ppid:<NULL>\n");
This prints "ppid:<NULL>". The inconsistency is weird.
Also there is no need to print ppid twice. I would remove it from the " stack:..." line as it was done in the previous version of the patch.
> + else
> + pr_info("parent:%-15.15s ppid:%-6d\n", pcomm, ppid);
"pcomm" must not be accessed after rcu_read_unlock(). The parent might disappear in the meantime.
I suggest to got back to the previous version and just add printing "parent:unknown ppid:<NULL>\n" when pid_alive(p) fails.
Best Regards, Petr
| ![\](/images/icornerr.gif) |