Messages in this thread Patch in this message | | | From | "Aneesh Kumar K.V" <> | Subject | [PATCH] ftrace: add proper bin iterator support | Date | Sun, 16 Nov 2008 16:08:00 +0530 |
| |
In s_show after print_trace_line we call trace_print_seq which does a strlen on the buffer containing binary data. I guess that would give wrong results for bin data even though we are null terminating it. We also don't want header in the output file if we have TRACE_ITER_BIN.
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
--- kernel/trace/trace.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 41 insertions(+), 0 deletions(-)
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 4a90462..f6e21d8 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -2080,10 +2080,51 @@ static enum print_line_t print_trace_line(struct trace_iterator *iter) return print_trace_fmt(iter); } +static int s_bin_show(struct seq_file *m, void *v) +{ + int len; + enum print_line_t ret; + struct trace_iterator *iter = v; + + if (iter->ent == NULL) + return 0; + + if (iter->trace && iter->trace->print_line) { + ret = iter->trace->print_line(iter); + if (ret != TRACE_TYPE_UNHANDLED) + goto trace_handled; + } + /* + * If trace type is unhandled or if we don't have + * a print_line call the standard bin_fmt callback + */ + print_bin_fmt(iter); + +trace_handled: + /* copy the trace buffer to seq file buffer */ + if (iter->seq.len >= PAGE_SIZE) + len = PAGE_SIZE - 1; + else + len = iter->seq.len; + + if (m->count + len < m->size) { + memcpy(m->buf + m->count, iter->seq.buffer, len); + m->count += len; + } else + m->count = m->size; + trace_seq_reset(&iter->seq); + + return 0; +} + + static int s_show(struct seq_file *m, void *v) { struct trace_iterator *iter = v; + if (trace_flags & TRACE_ITER_BIN) + return s_bin_show(m, v); + if (iter->ent == NULL) { if (iter->tr) { seq_printf(m, "# tracer: %s\n", iter->trace->name); -- tg: (7195b67..) an/ftrace-bin-iterator.patch (depends on: master)
| |