lkml.org 
[lkml]   [2010]   [Jan]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 3/5] ring-buffer: Check for end of page in iterator
    From: Steven Rostedt <srostedt@redhat.com>

    If the iterator comes to an empty page for some reason, or if
    the page is emptied by a consuming read. The iterator code currently
    does not check if the iterator is pass the contents, and may
    return a false entry.

    This patch adds a check to the ring buffer iterator to test if the
    current page has been completely read and sets the iterator to the
    next page if necessary.

    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    ---
    kernel/trace/ring_buffer.c | 11 ++++++++---
    1 files changed, 8 insertions(+), 3 deletions(-)

    diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
    index 503b630..8c1b2d2 100644
    --- a/kernel/trace/ring_buffer.c
    +++ b/kernel/trace/ring_buffer.c
    @@ -3064,9 +3064,6 @@ rb_iter_peek(struct ring_buffer_iter *iter, u64 *ts)
    struct ring_buffer_event *event;
    int nr_loops = 0;

    - if (ring_buffer_iter_empty(iter))
    - return NULL;
    -
    cpu_buffer = iter->cpu_buffer;
    buffer = cpu_buffer->buffer;

    @@ -3080,6 +3077,9 @@ rb_iter_peek(struct ring_buffer_iter *iter, u64 *ts)
    rb_iter_reset(iter);

    again:
    + if (ring_buffer_iter_empty(iter))
    + return NULL;
    +
    /*
    * We repeat when a timestamp is encountered.
    * We can get multiple timestamps by nested interrupts or also
    @@ -3094,6 +3094,11 @@ rb_iter_peek(struct ring_buffer_iter *iter, u64 *ts)
    if (rb_per_cpu_empty(cpu_buffer))
    return NULL;

    + if (iter->head >= local_read(&iter->head_page->page->commit)) {
    + rb_inc_iter(iter);
    + goto again;
    + }
    +
    event = rb_iter_head_event(iter);

    switch (event->type_len) {
    --
    1.6.5



    \
     
     \ /
      Last update: 2010-01-26 23:21    [W:0.031 / U:64.496 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site