Lai Jiangshan
4f48f8b7fd
tracing: Fix circular dead lock in stack trace
...
When we cat <debugfs>/tracing/stack_trace, we may cause circular lock:
sys_read()
t_start()
arch_spin_lock(&max_stack_lock);
t_show()
seq_printf(), vsnprintf() .... /* they are all trace-able,
when they are traced, max_stack_lock may be required again. */
The following script can trigger this circular dead lock very easy:
#!/bin/bash
echo 1 > /proc/sys/kernel/stack_tracer_enabled
mount -t debugfs xxx /mnt > /dev/null 2>&1
(
# make check_stack() zealous to require max_stack_lock
for ((; ;))
{
echo 1 > /mnt/tracing/stack_max_size
}
) &
for ((; ;))
{
cat /mnt/tracing/stack_trace > /dev/null
}
To fix this bug, we increase the percpu trace_active before
require the lock.
Reported-by: Li Zefan <lizf@cn.fujitsu.com>
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
LKML-Reference: <4B67D4F9.9080905@cn.fujitsu.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2010-02-02 10:20:18 -05:00
..
2009-09-21 14:29:21 +02:00
2009-12-14 23:55:33 +01:00
2009-12-15 08:53:28 -08:00
2010-01-26 14:53:16 +01:00
2010-02-02 10:20:18 -05:00
2009-12-15 08:53:10 -08:00
2009-12-19 09:27:43 -08:00
2009-09-24 03:50:25 -04:00
2009-09-24 03:50:26 -04:00
2009-12-22 12:27:34 -05:00
2009-12-12 13:08:14 +01:00
2009-11-24 15:06:47 +11:00
2009-09-24 07:20:58 -07:00
2010-01-11 09:34:05 -08:00
2010-01-28 06:59:55 +01:00
2009-12-06 21:10:56 +01:00
2009-09-23 11:02:26 -07:00
2009-09-18 09:48:52 -07:00
2009-12-17 15:45:31 -08:00
2010-01-21 23:25:31 +01:00
2009-08-10 15:41:12 +02:00
2010-01-13 09:17:36 +01:00
2009-12-14 23:55:34 +01:00
2009-11-27 06:21:57 +01:00
2010-01-30 08:42:21 +01:00
2009-11-18 16:32:12 +01:00
2009-11-10 11:23:29 +01:00
2009-12-03 11:50:11 +01:00
2010-01-24 10:31:34 -08:00
2010-01-16 12:15:38 -08:00
2010-01-30 08:42:20 +01:00
2010-01-11 09:34:04 -08:00
2009-12-28 10:25:31 +01:00
2009-12-16 07:20:13 -08:00
2009-12-16 19:01:57 +01:00
2009-09-23 07:39:29 -07:00
2010-01-27 08:34:02 +01:00
2009-12-08 08:02:38 -08:00
2010-01-06 01:11:29 -08:00
2009-10-11 11:20:58 -07:00
2009-12-14 23:55:32 +01:00
2009-12-03 11:50:11 +01:00
2009-08-30 03:08:26 +02:00
2009-09-24 07:20:58 -07:00
2009-12-31 19:45:04 +00:00
2009-12-15 08:53:32 -08:00
2010-01-21 13:40:40 +01:00
2009-09-24 07:21:04 -07:00
2009-12-16 07:20:12 -08:00
2009-10-14 15:31:10 +02:00
2009-11-18 12:36:05 +01:00
2009-08-21 21:43:46 +02:00
2010-01-24 10:31:34 -08:00
2009-09-20 20:15:40 +02:00
2009-09-24 07:20:59 -07:00
2009-11-22 18:58:16 +01:00
2009-11-22 18:58:16 +01:00
2009-12-14 09:58:24 -08:00
2009-12-03 11:35:25 +01:00
2009-12-03 11:35:25 +01:00
2009-12-03 11:35:25 +01:00
2009-12-03 11:35:25 +01:00
2009-12-16 07:20:05 -08:00
2009-10-01 16:11:13 -07:00
2009-12-21 10:42:29 -08:00
2009-12-14 23:55:33 +01:00
2009-12-14 23:55:33 +01:00
2009-12-15 09:04:36 +01:00
2009-12-14 23:55:33 +01:00
2009-12-14 23:55:33 +01:00
2009-12-14 23:55:33 +01:00
2010-01-21 13:39:03 +01:00
2009-12-09 10:03:07 +01:00
2009-12-20 19:05:02 +01:00
2009-12-16 19:01:58 +01:00
2010-01-21 23:25:31 +01:00
2010-01-11 09:34:05 -08:00
2009-12-01 08:20:31 -08:00
2009-12-08 07:38:50 -08:00
2009-12-01 08:20:31 -08:00
2010-01-16 12:15:39 -08:00
2009-12-14 09:58:24 -08:00
2009-10-29 22:34:13 +09:00
2009-12-14 23:55:33 +01:00
2009-10-26 09:40:30 +01:00
2009-12-08 07:55:01 -08:00
2009-12-19 09:47:34 -08:00
2009-12-23 21:00:20 +01:00
2009-12-03 12:14:38 -08:00
2009-12-17 16:58:26 -08:00
2009-12-22 14:10:37 -08:00
2010-01-21 13:40:39 +01:00
2009-09-21 15:14:55 +02:00
2009-09-23 18:13:10 -07:00
2009-12-02 10:22:59 +01:00
2009-11-02 16:02:39 +01:00
2009-11-12 02:04:55 -08:00
2009-08-10 14:43:09 +02:00
2009-12-10 09:35:44 -08:00