lkml.org 
[lkml]   [2014]   [Nov]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [RFC][PATCH 11/23 v4] tracing: Do not use return values of trace_seq_printf() in syscall tracing
    On Mon, 17 Nov 2014 21:44:11 -0500
    Steven Rostedt <rostedt@goodmis.org> wrote:

    > On Tue, 18 Nov 2014 09:49:12 +0900
    > Namhyung Kim <namhyung@kernel.org> wrote:
    >

    > > > - ret = trace_seq_printf(s, "%s(", entry->name);
    > > > - if (!ret)
    > > > - return TRACE_TYPE_PARTIAL_LINE;
    > > > + trace_seq_printf(s, "%s(", entry->name);
    > > >
    > > > for (i = 0; i < entry->nb_args; i++) {
    > >
    > > if (trace_seq_has_overflowed())
    > > goto end;
    > > ?
    >
    > Yeah, I guess I can do that.
    >

    Here's the update:

    -- Steve

    From 17845179b46f3e8b849d06a9a0069fd0a085e666 Mon Sep 17 00:00:00 2001
    From: "Steven Rostedt (Red Hat)" <rostedt@goodmis.org>
    Date: Wed, 12 Nov 2014 17:41:33 -0500
    Subject: [PATCH] tracing: Do not use return values of trace_seq_printf() in
    syscall tracing

    The functions trace_seq_printf() and friends will not be returning values
    soon and will be void functions. To know if they succeeded or not, the
    functions trace_seq_has_overflowed() and trace_handle_return() should be
    used instead.

    Reviewed-by: Petr Mladek <pmladek@suse.cz>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    ---
    kernel/trace/trace_syscalls.c | 47 +++++++++++++++++--------------------------
    1 file changed, 19 insertions(+), 28 deletions(-)

    diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c
    index 4dc8b79c5f75..a72f3d8d813e 100644
    --- a/kernel/trace/trace_syscalls.c
    +++ b/kernel/trace/trace_syscalls.c
    @@ -114,7 +114,7 @@ print_syscall_enter(struct trace_iterator *iter, int flags,
    struct trace_entry *ent = iter->ent;
    struct syscall_trace_enter *trace;
    struct syscall_metadata *entry;
    - int i, ret, syscall;
    + int i, syscall;

    trace = (typeof(trace))ent;
    syscall = trace->nr;
    @@ -128,35 +128,28 @@ print_syscall_enter(struct trace_iterator *iter, int flags,
    goto end;
    }

    - ret = trace_seq_printf(s, "%s(", entry->name);
    - if (!ret)
    - return TRACE_TYPE_PARTIAL_LINE;
    + trace_seq_printf(s, "%s(", entry->name);

    for (i = 0; i < entry->nb_args; i++) {
    +
    + if (trace_seq_has_overflowed(s))
    + goto end;
    +
    /* parameter types */
    - if (trace_flags & TRACE_ITER_VERBOSE) {
    - ret = trace_seq_printf(s, "%s ", entry->types[i]);
    - if (!ret)
    - return TRACE_TYPE_PARTIAL_LINE;
    - }
    + if (trace_flags & TRACE_ITER_VERBOSE)
    + trace_seq_printf(s, "%s ", entry->types[i]);
    +
    /* parameter values */
    - ret = trace_seq_printf(s, "%s: %lx%s", entry->args[i],
    - trace->args[i],
    - i == entry->nb_args - 1 ? "" : ", ");
    - if (!ret)
    - return TRACE_TYPE_PARTIAL_LINE;
    + trace_seq_printf(s, "%s: %lx%s", entry->args[i],
    + trace->args[i],
    + i == entry->nb_args - 1 ? "" : ", ");
    }

    - ret = trace_seq_putc(s, ')');
    - if (!ret)
    - return TRACE_TYPE_PARTIAL_LINE;
    -
    + trace_seq_putc(s, ')');
    end:
    - ret = trace_seq_putc(s, '\n');
    - if (!ret)
    - return TRACE_TYPE_PARTIAL_LINE;
    + trace_seq_putc(s, '\n');

    - return TRACE_TYPE_HANDLED;
    + return trace_handle_return(s);
    }

    static enum print_line_t
    @@ -168,7 +161,6 @@ print_syscall_exit(struct trace_iterator *iter, int flags,
    struct syscall_trace_exit *trace;
    int syscall;
    struct syscall_metadata *entry;
    - int ret;

    trace = (typeof(trace))ent;
    syscall = trace->nr;
    @@ -176,7 +168,7 @@ print_syscall_exit(struct trace_iterator *iter, int flags,

    if (!entry) {
    trace_seq_putc(s, '\n');
    - return TRACE_TYPE_HANDLED;
    + goto out;
    }

    if (entry->exit_event->event.type != ent->type) {
    @@ -184,12 +176,11 @@ print_syscall_exit(struct trace_iterator *iter, int flags,
    return TRACE_TYPE_UNHANDLED;
    }

    - ret = trace_seq_printf(s, "%s -> 0x%lx\n", entry->name,
    + trace_seq_printf(s, "%s -> 0x%lx\n", entry->name,
    trace->ret);
    - if (!ret)
    - return TRACE_TYPE_PARTIAL_LINE;

    - return TRACE_TYPE_HANDLED;
    + out:
    + return trace_handle_return(s);
    }

    extern char *__bad_type_size(void);
    --
    1.8.1.4



    \
     
     \ /
      Last update: 2014-11-18 04:41    [W:3.391 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site