summaryrefslogtreecommitdiffstats
path: root/kernel/trace/ring_buffer.c
diff options
context:
space:
mode:
authorSteven Rostedt2009-09-02 15:59:48 +0200
committerSteven Rostedt2009-09-04 17:15:08 +0200
commit41b6a95d693319f804607b559893fbbd27498548 (patch)
treeeafa22ab694eda7723cec115592a861867432a66 /kernel/trace/ring_buffer.c
parenttracing/filters: Defer pred allocation (diff)
downloadkernel-qcow2-linux-41b6a95d693319f804607b559893fbbd27498548.tar.gz
kernel-qcow2-linux-41b6a95d693319f804607b559893fbbd27498548.tar.xz
kernel-qcow2-linux-41b6a95d693319f804607b559893fbbd27498548.zip
ring-buffer: do not reset while in a commit
The callers of reset must ensure that no commit can be taking place at the time of the reset. If it does then we may corrupt the ring buffer. Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'kernel/trace/ring_buffer.c')
-rw-r--r--kernel/trace/ring_buffer.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index da2c59d8f486..79d6012bb1f1 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -3373,12 +3373,16 @@ void ring_buffer_reset_cpu(struct ring_buffer *buffer, int cpu)
spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
+ if (RB_WARN_ON(cpu_buffer, local_read(&cpu_buffer->committing)))
+ goto out;
+
__raw_spin_lock(&cpu_buffer->lock);
rb_reset_cpu(cpu_buffer);
__raw_spin_unlock(&cpu_buffer->lock);
+ out:
spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
atomic_dec(&cpu_buffer->record_disabled);