lkml.org 
[lkml]   [2017]   [Apr]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[for-next][PATCH 02/33] ftrace: Fix indexing of t_hash_start() from t_next()
    From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>

    t_hash_start() does not increment *pos, where as t_next() must. But when
    t_next() does increment *pos, it must still pass in the original *pos to
    t_hash_start() otherwise it will skip the first instance:

    # cd /sys/kernel/debug/tracing
    # echo schedule:traceoff > set_ftrace_filter
    # echo do_IRQ:traceoff > set_ftrace_filter
    # echo call_rcu > set_ftrace_filter
    # cat set_ftrace_filter
    call_rcu
    schedule:traceoff:unlimited
    do_IRQ:traceoff:unlimited

    The above called t_hash_start() from t_start() as there was only one
    function (call_rcu), but if we add another function:

    # echo xfrm_policy_destroy_rcu >> set_ftrace_filter
    # cat set_ftrace_filter
    call_rcu
    xfrm_policy_destroy_rcu
    do_IRQ:traceoff:unlimited

    The "schedule:traceoff" disappears.

    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    ---
    kernel/trace/ftrace.c | 5 +++--
    1 file changed, 3 insertions(+), 2 deletions(-)

    diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
    index 4b6459a57fbc..b21a3e61ac74 100644
    --- a/kernel/trace/ftrace.c
    +++ b/kernel/trace/ftrace.c
    @@ -3205,6 +3205,7 @@ static void *
    t_next(struct seq_file *m, void *v, loff_t *pos)
    {
    struct ftrace_iterator *iter = m->private;
    + loff_t l = *pos; /* t_hash_start() must use original pos */
    void *ret;

    if (unlikely(ftrace_disabled))
    @@ -3216,13 +3217,13 @@ t_next(struct seq_file *m, void *v, loff_t *pos)
    if (iter->flags & FTRACE_ITER_PRINTALL) {
    /* next must increment pos, and t_hash_start does not */
    (*pos)++;
    - return t_hash_start(m, pos);
    + return t_hash_start(m, &l);
    }

    ret = t_func_next(m, pos);

    if (!ret)
    - return t_hash_start(m, pos);
    + return t_hash_start(m, &l);

    return ret;
    }
    --
    2.10.2

    \
     
     \ /
      Last update: 2017-04-21 23:44    [W:3.063 / U:0.080 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site