2 * Dump the contents of a verify state file in plain text
14 #include "../verify-state.h"
15 #include "../crc/crc32c.h"
18 static void show_s(struct thread_io_list *s, unsigned int no_s)
22 printf("Thread:\t\t%u\n", no_s);
23 printf("Name:\t\t%s\n", s->name);
24 printf("Completions:\t%llu\n", (unsigned long long) s->no_comps);
25 printf("Depth:\t\t%llu\n", (unsigned long long) s->depth);
26 printf("Number IOs:\t%llu\n", (unsigned long long) s->numberio);
27 printf("Index:\t\t%llu\n", (unsigned long long) s->index);
29 printf("Completions:\n");
32 for (i = s->no_comps - 1; i >= 0; i--) {
33 printf("\t(file=%2llu) %llu\n",
34 (unsigned long long) s->comps[i].fileno,
35 (unsigned long long) s->comps[i].offset);
39 static void show(struct thread_io_list *s, size_t size)
47 s->no_comps = le64_to_cpu(s->no_comps);
48 s->depth = le32_to_cpu(s->depth);
49 s->nofiles = le32_to_cpu(s->nofiles);
50 s->numberio = le64_to_cpu(s->numberio);
51 s->index = le64_to_cpu(s->index);
53 for (i = 0; i < s->no_comps; i++) {
54 s->comps[i].fileno = le64_to_cpu(s->comps[i].fileno);
55 s->comps[i].offset = le64_to_cpu(s->comps[i].offset);
60 size -= __thread_io_list_sz(s->depth, s->nofiles);
61 s = (struct thread_io_list *)((char *) s +
62 __thread_io_list_sz(s->depth, s->nofiles));
66 static void show_verify_state(void *buf, size_t size)
68 struct verify_state_hdr *hdr = buf;
69 struct thread_io_list *s;
72 hdr->version = le64_to_cpu(hdr->version);
73 hdr->size = le64_to_cpu(hdr->size);
74 hdr->crc = le64_to_cpu(hdr->crc);
76 printf("Version:\t0x%x\n", (unsigned int) hdr->version);
77 printf("Size:\t\t%u\n", (unsigned int) hdr->size);
78 printf("CRC:\t\t0x%x\n", (unsigned int) hdr->crc);
81 if (hdr->size != size) {
82 log_err("Size mismatch\n");
86 s = buf + sizeof(*hdr);
87 crc = fio_crc32c((unsigned char *) s, hdr->size);
88 if (crc != hdr->crc) {
89 log_err("crc mismatch %x != %x\n", crc, (unsigned int) hdr->crc);
93 if (hdr->version == 0x03)
96 log_err("Unsupported version %d\n", (int) hdr->version);
99 static int show_file(const char *file)
105 fd = open(file, O_RDONLY);
107 log_err("open %s: %s\n", file, strerror(errno));
111 if (fstat(fd, &sb) < 0) {
112 log_err("stat: %s\n", strerror(errno));
117 buf = malloc(sb.st_size);
118 ret = read(fd, buf, sb.st_size);
120 log_err("read: %s\n", strerror(errno));
123 } else if (ret != sb.st_size) {
124 log_err("Short read\n");
130 show_verify_state(buf, sb.st_size);
136 int main(int argc, char *argv[])
143 log_err("Usage: %s <state file>\n", argv[0]);
148 for (i = 1; i < argc; i++) {
149 ret = show_file(argv[i]);