[PATCH 2/2] ftrace: print continue index fix

From: Steven Rostedt
Date: Wed Sep 03 2008 - 17:48:47 EST


An item in the trace buffer that is bigger than one entry may be split
up using the TRACE_CONT entry. This makes it a virtual single entry.
The current code increments the iterator index even while traversing
TRACE_CONT entries, making it look like the iterator is further than
it actually is.

This patch adds code to not increment the iterator index while skipping
over TRACE_CONT entries.

Signed-off-by: Steven Rostedt <srostedt@xxxxxxxxxx>
---
kernel/trace/trace.c | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)

Index: linux-tip.git/kernel/trace/trace.c
===================================================================
--- linux-tip.git.orig/kernel/trace/trace.c 2008-09-03 16:46:30.000000000 -0400
+++ linux-tip.git/kernel/trace/trace.c 2008-09-03 16:50:03.000000000 -0400
@@ -1117,9 +1117,8 @@ trace_entry_idx(struct trace_array *tr,
}

/* Increment the index counter of an iterator by one */
-static void trace_iterator_increment(struct trace_iterator *iter, int cpu)
+static void __trace_iterator_increment(struct trace_iterator *iter, int cpu)
{
- iter->idx++;
iter->next_idx[cpu]++;
iter->next_page_idx[cpu]++;

@@ -1132,6 +1131,12 @@ static void trace_iterator_increment(str
}
}

+static void trace_iterator_increment(struct trace_iterator *iter, int cpu)
+{
+ iter->idx++;
+ __trace_iterator_increment(iter, cpu);
+}
+
static struct trace_entry *
trace_entry_next(struct trace_array *tr, struct trace_array_cpu *data,
struct trace_iterator *iter, int cpu)
@@ -1153,7 +1158,7 @@ trace_entry_next(struct trace_array *tr,

/* find a real entry */
do {
- trace_iterator_increment(iter, cpu);
+ __trace_iterator_increment(iter, cpu);
ent = trace_entry_idx(tr, tr->data[cpu], iter, cpu);
} while (ent && ent->type != TRACE_CONT);

@@ -1187,7 +1192,7 @@ __find_next_entry(struct trace_iterator
ent = trace_entry_next(tr, data, iter, cpu);
else {
while (ent && ent->type == TRACE_CONT) {
- trace_iterator_increment(iter, cpu);
+ __trace_iterator_increment(iter, cpu);
ent = trace_entry_idx(tr, tr->data[cpu],
iter, cpu);
}
@@ -1566,7 +1571,7 @@ trace_seq_print_cont(struct trace_seq *s

do {
trace_seq_printf(s, "%s", ent->cont.buf);
- trace_iterator_increment(iter, iter->cpu);
+ __trace_iterator_increment(iter, iter->cpu);
ent = trace_entry_idx(tr, data, iter, iter->cpu);
} while (ent && ent->type == TRACE_CONT);
}

--
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/