Messages in this thread Patch in this message | | | Date | Mon, 17 Aug 2009 16:52:53 +0800 | From | Li Zefan <> | Subject | [PATCH 1/3] trace_stat: Fix missing entry in stat file |
| |
One entry is missing in the output of a stat file.
The cause is, when stat_seq_start() is called the 2nd time, we should start from the (pos-1)th elem in the rbtree but not pos, because pos == 0 is the header.
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com> --- kernel/trace/trace_stat.c | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/kernel/trace/trace_stat.c b/kernel/trace/trace_stat.c index 07c60b0..a4bb239 100644 --- a/kernel/trace/trace_stat.c +++ b/kernel/trace/trace_stat.c @@ -203,17 +203,21 @@ static void *stat_seq_start(struct seq_file *s, loff_t *pos) { struct stat_session *session = s->private; struct rb_node *node; + int n = *pos; int i; /* Prevent from tracer switch or rbtree modification */ mutex_lock(&session->stat_mutex); /* If we are in the beginning of the file, print the headers */ - if (!*pos && session->ts->stat_headers) - return SEQ_START_TOKEN; + if (session->ts->stat_headers) { + if (n == 0) + return SEQ_START_TOKEN; + n--; + } node = rb_first(&session->stat_root); - for (i = 0; node && i < *pos; i++) + for (i = 0; node && i < n; i++) node = rb_next(node); return node; -- 1.6.3
| |