aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2009-09-02 09:59:48 -0400
committerSteven Rostedt <rostedt@goodmis.org>2009-09-04 11:15:08 -0400
commit41b6a95d693319f804607b559893fbbd27498548 (patch)
treeeafa22ab694eda7723cec115592a861867432a66 /kernel
parent8e254c1d183f0225ad21f9049641529e56cce4da (diff)
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')
-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)
3373 3373
3374 spin_lock_irqsave(&cpu_buffer->reader_lock, flags); 3374 spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
3375 3375
3376 if (RB_WARN_ON(cpu_buffer, local_read(&cpu_buffer->committing)))
3377 goto out;
3378
3376 __raw_spin_lock(&cpu_buffer->lock); 3379 __raw_spin_lock(&cpu_buffer->lock);
3377 3380
3378 rb_reset_cpu(cpu_buffer); 3381 rb_reset_cpu(cpu_buffer);
3379 3382
3380 __raw_spin_unlock(&cpu_buffer->lock); 3383 __raw_spin_unlock(&cpu_buffer->lock);
3381 3384
3385 out:
3382 spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags); 3386 spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
3383 3387
3384 atomic_dec(&cpu_buffer->record_disabled); 3388 atomic_dec(&cpu_buffer->record_disabled);