The current method of printing out the trace is on every
read, do a linear search for the next entry to print.
This patch remembers the next entry to look at in the
iterator, and if the next read is sequential, it can
start reading from the next location.
Signed-off-by: Steven Rostedt <srostedt@redhat.com>
---
lib/tracing/tracer.c | 28 +++++++++++++++++++---------
1 file changed, 19 insertions(+), 9 deletions(-)
Index: linux-compile-i386.git/lib/tracing/tracer.c
===================================================================
--- linux-compile-i386.git.orig/lib/tracing/tracer.c 2008-01-09 14:37:13.000000000 -0500
+++ linux-compile-i386.git/lib/tracing/tracer.c 2008-01-09 15:17:24.000000000 -0500
@@ -105,6 +105,7 @@ enum trace_iterator {
struct mctracer_iterator {
struct mctracer_trace *tr;
struct mctracer_entry *ent;
+ loff_t pos;
unsigned long next_idx[NR_CPUS];
int cpu;
int idx;
@@ -176,6 +177,8 @@ static void *s_next(struct seq_file *m,
while (ent && iter->idx < i)
ent = find_next_entry(iter);
+ iter->pos = *pos;
+
return ent;
}
@@ -186,19 +189,25 @@ static void *s_start(struct seq_file *m,
loff_t l = 0;
int i;
- iter->ent = NULL;
- iter->cpu = 0;
- iter->idx = -1;
-
- for (i = 0; i < NR_CPUS; i++)
- iter->next_idx[i] = 0;
-
/* stop the trace while dumping */
if (iter->tr->ctrl)
clear_mcount_function();
- for (p = iter; p && l < *pos; p = s_next(m, p, &l))
- ;
+ if (*pos != iter->pos) {
+ iter->ent = NULL;
+ iter->cpu = 0;
+ iter->idx = -1;
+
+ for (i = 0; i < NR_CPUS; i++)
+ iter->next_idx[i] = 0;
+
+ for (p = iter; p && l < *pos; p = s_next(m, p, &l))
+ ;
+
+ } else {
+ l = *pos;
+ p = s_next(m, p, &l);
+ }
return p;
}
@@ -286,6 +295,7 @@ static int mctrace_open(struct inode *in
return -ENOMEM;
iter->tr = &mctracer_trace;
+ iter->pos = -1;
/* TODO stop tracer */
ret = seq_open(file, &mctrace_seq_ops);
--
--
| Greg KH | [GIT PATCH] driver core patches against 2.6.24 |
| debian developer | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| Adrian Bunk | Re: LSM conversion to static interface |
git: | |
| Gerrit Renker | [PATCH 26/37] dccp: Integration of dynamic feature activation - part 1 (socket set... |
| Jarek Poplawski | Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| Frans Pop | svc: failed to register lockdv1 RPC service (errno 97). |
| Linus Torvalds | Re: [GIT]: Networking |
