diff options
author | Ingo Molnar <mingo@elte.hu> | 2007-12-05 15:46:09 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2007-12-05 15:46:09 +0100 |
commit | 856848737bd944c1db3ce0a66bbf67e56bd6f77d (patch) | |
tree | 4fce302f29225f7d1d558559e40e73dadc40e60e /kernel/lockdep.c | |
parent | 41a2d6cfa3f77ec469e7e5f06b4d7ffd031f9c0e (diff) | |
download | lwn-856848737bd944c1db3ce0a66bbf67e56bd6f77d.tar.gz lwn-856848737bd944c1db3ce0a66bbf67e56bd6f77d.zip |
lockdep: fix debug_show_all_locks()
fix the oops that can be seen in:
http://bugzilla.kernel.org/attachment.cgi?id=13828&action=view
it is not safe to print the locks of running tasks.
(even with this fix we have a small race - but this is a debug
function after all.)
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Diffstat (limited to 'kernel/lockdep.c')
-rw-r--r-- | kernel/lockdep.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/kernel/lockdep.c b/kernel/lockdep.c index ed38bbfc48a3..7e2ca7c9d99c 100644 --- a/kernel/lockdep.c +++ b/kernel/lockdep.c @@ -3173,6 +3173,13 @@ retry: printk(" locked it.\n"); do_each_thread(g, p) { + /* + * It's not reliable to print a task's held locks + * if it's not sleeping (or if it's not the current + * task): + */ + if (p->state == TASK_RUNNING && p != current) + continue; if (p->lockdep_depth) lockdep_print_held_locks(p); if (!unlock) |