From d6222db89aea11a0dfc39f431bc24849ba5b055c Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Wed, 28 Sep 2005 10:56:59 +0200 Subject: [PATCH] [PATCH] blkparse: misc assorted fixes - Move the trace verification earlier, so that traces on trace_list are always known valid - Start with -1 sequence so when using the stopwatch the skip count is correct (first entry might not be 1) - stdin get_cpu_info() fix --- blkparse.c | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/blkparse.c b/blkparse.c index 1bec66a..2c7658e 100644 --- a/blkparse.c +++ b/blkparse.c @@ -702,7 +702,7 @@ static struct per_dev_info *get_dev_info(dev_t id) pdi = &devices[ndevices - 1]; pdi->id = id; - pdi->last_sequence = 0; + pdi->last_sequence = -1; pdi->last_read_time = 0; memset(&pdi->rb_last, 0, sizeof(pdi->rb_last)); pdi->rb_last_entries = 0; @@ -1246,17 +1246,17 @@ static int sort_entries(unsigned long long *youngest) if (!genesis_time) find_genesis(); - *youngest = -1ULL; + *youngest = 0; while ((t = trace_list) != NULL) { struct blk_io_trace *bit = t->bit; trace_list = t->next; - if (verify_trace(bit)) - continue; - bit->time -= genesis_time; + if (bit->time < *youngest || !*youngest) + *youngest = bit->time; + if (check_stopwatch(bit)) { bit_free(bit); t_free(t); @@ -1265,9 +1265,6 @@ static int sort_entries(unsigned long long *youngest) if (trace_rb_insert_sort(t)) return -1; - - if (bit->time < *youngest) - *youngest = bit->time; } return 0; @@ -1297,6 +1294,12 @@ static int check_sequence(struct per_dev_info *pdi, struct blk_io_trace *bit, { unsigned long expected_sequence = pdi->last_sequence + 1; struct trace *t; + + /* + * first entry, always ok + */ + if (!expected_sequence) + return 0; if (bit->sequence == expected_sequence) return 0; @@ -1353,13 +1356,6 @@ static void show_entries_rb(int force) break; } - if (bit->cpu > pdi->ncpus) { - fprintf(stderr, "Unknown CPU ID? (%d, device %d,%d)\n", - bit->cpu, MAJOR(bit->device), - MINOR(bit->device)); - break; - } - if (check_sequence(pdi, bit, force)) break; @@ -1443,12 +1439,17 @@ static int read_events(int fd, int always_block) bit = ptr; } + trace_to_cpu(bit); + + if (verify_trace(bit)) { + bit_free(bit); + continue; + } + t = t_alloc(); memset(t, 0, sizeof(*t)); t->bit = bit; - trace_to_cpu(bit); - t->next = trace_list; trace_list = t; @@ -1476,7 +1477,7 @@ static int do_file(void) for (i = 0; i < ndevices; i++) { pdi = &devices[i]; pdi->nfiles = 0; - pdi->last_sequence = 0; + pdi->last_sequence = -1; for (j = 0;; j++) { struct stat st; -- 2.25.1