ring-buffer: fix ring_buffer_read crossing pages
[pandora-kernel.git] / kernel / trace / ring_buffer.c
index a05541a..9d939e7 100644 (file)
@@ -3286,19 +3286,19 @@ ring_buffer_read(struct ring_buffer_iter *iter, u64 *ts)
        struct ring_buffer_per_cpu *cpu_buffer = iter->cpu_buffer;
        unsigned long flags;
 
- again:
        spin_lock_irqsave(&cpu_buffer->reader_lock, flags);
+ again:
        event = rb_iter_peek(iter, ts);
        if (!event)
                goto out;
 
+       if (event->type_len == RINGBUF_TYPE_PADDING)
+               goto again;
+
        rb_advance_iter(iter);
  out:
        spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
 
-       if (event && event->type_len == RINGBUF_TYPE_PADDING)
-               goto again;
-
        return event;
 }
 EXPORT_SYMBOL_GPL(ring_buffer_read);