X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=t%2Fverify-state.c;h=734c1e4c77fa81c791f62d4e784f060d4256c6a9;hp=cb5ef31d8c36e199933fc586d94873f831b32c61;hb=5de1d4ba1e6ae82bb4ad559463801cb6b7096ac3;hpb=98996ef93ff37e0f51d90ca87ff0f75d4d1c153f diff --git a/t/verify-state.c b/t/verify-state.c index cb5ef31d..734c1e4c 100644 --- a/t/verify-state.c +++ b/t/verify-state.c @@ -19,15 +19,48 @@ static void show_s(struct thread_io_list *s, unsigned int no_s) { int i; - printf("Thread %u, %s\n", no_s, s->name); - printf("Completions: %lu\n", s->no_comps); - printf("Depth: %lu\n", s->depth); - printf("Number IOs: %lu\n", s->numberio); - printf("Index: %lu\n", s->index); + printf("Thread:\t\t%u\n", no_s); + printf("Name:\t\t%s\n", s->name); + printf("Completions:\t%llu\n", (unsigned long long) s->no_comps); + printf("Depth:\t\t%llu\n", (unsigned long long) s->depth); + printf("Number IOs:\t%llu\n", (unsigned long long) s->numberio); + printf("Index:\t\t%llu\n", (unsigned long long) s->index); printf("Completions:\n"); - for (i = 0; i < s->no_comps; i++) - printf("\t%lu\n", s->offsets[i]); + if (!s->no_comps) + return; + for (i = s->no_comps - 1; i >= 0; i--) { + printf("\t(file=%2llu) %llu\n", + (unsigned long long) s->comps[i].fileno, + (unsigned long long) s->comps[i].offset); + } +} + +static void show(struct thread_io_list *s, size_t size) +{ + int no_s; + + no_s = 0; + do { + int i; + + s->no_comps = le64_to_cpu(s->no_comps); + s->depth = le32_to_cpu(s->depth); + s->nofiles = le32_to_cpu(s->nofiles); + s->numberio = le64_to_cpu(s->numberio); + s->index = le64_to_cpu(s->index); + + for (i = 0; i < s->no_comps; i++) { + s->comps[i].fileno = le64_to_cpu(s->comps[i].fileno); + s->comps[i].offset = le64_to_cpu(s->comps[i].offset); + } + + show_s(s, no_s); + no_s++; + size -= __thread_io_list_sz(s->depth, s->nofiles); + s = (struct thread_io_list *)((char *) s + + __thread_io_list_sz(s->depth, s->nofiles)); + } while (size != 0); } static void show_verify_state(void *buf, size_t size) @@ -35,15 +68,14 @@ static void show_verify_state(void *buf, size_t size) struct verify_state_hdr *hdr = buf; struct thread_io_list *s; uint32_t crc; - int no_s; hdr->version = le64_to_cpu(hdr->version); hdr->size = le64_to_cpu(hdr->size); hdr->crc = le64_to_cpu(hdr->crc); - printf("Version: %x, Size %u, crc %x\n", (unsigned int) hdr->version, - (unsigned int) hdr->size, - (unsigned int) hdr->crc); + printf("Version:\t0x%x\n", (unsigned int) hdr->version); + printf("Size:\t\t%u\n", (unsigned int) hdr->size); + printf("CRC:\t\t0x%x\n", (unsigned int) hdr->crc); size -= sizeof(*hdr); if (hdr->size != size) { @@ -58,46 +90,21 @@ static void show_verify_state(void *buf, size_t size) return; } - if (hdr->version != 0x02) { - log_err("Can only handle version 2 headers\n"); - return; - } - - no_s = 0; - do { - int i; - - s->no_comps = le64_to_cpu(s->no_comps); - s->depth = le64_to_cpu(s->depth); - s->numberio = le64_to_cpu(s->numberio); - s->index = le64_to_cpu(s->index); - - for (i = 0; i < s->no_comps; i++) - s->offsets[i] = le64_to_cpu(s->offsets[i]); - - show_s(s, no_s); - no_s++; - size -= __thread_io_list_sz(s->depth); - s = (void *) s + __thread_io_list_sz(s->depth); - } while (size != 0); + if (hdr->version == 0x03) + show(s, size); + else + log_err("Unsupported version %d\n", (int) hdr->version); } -int main(int argc, char *argv[]) +static int show_file(const char *file) { struct stat sb; void *buf; int ret, fd; - debug_init(); - - if (argc < 2) { - log_err("Usage: %s \n", argv[0]); - return 1; - } - - fd = open(argv[1], O_RDONLY); + fd = open(file, O_RDONLY); if (fd < 0) { - log_err("open %s: %s\n", argv[1], strerror(errno)); + log_err("open %s: %s\n", file, strerror(errno)); return 1; } @@ -112,10 +119,12 @@ int main(int argc, char *argv[]) if (ret < 0) { log_err("read: %s\n", strerror(errno)); close(fd); + free(buf); return 1; } else if (ret != sb.st_size) { log_err("Short read\n"); close(fd); + free(buf); return 1; } @@ -125,3 +134,24 @@ int main(int argc, char *argv[]) free(buf); return 0; } + +int main(int argc, char *argv[]) +{ + int i, ret; + + debug_init(); + + if (argc < 2) { + log_err("Usage: %s \n", argv[0]); + return 1; + } + + ret = 0; + for (i = 1; i < argc; i++) { + ret = show_file(argv[i]); + if (ret) + break; + } + + return ret; +}