X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=iolog.c;h=f0ce3b25002d0d01e5a671068f32199af9502017;hb=871467d9b6a804632c8c952a61fc3065b3e1e93f;hp=2b7b0babf085e6185e6a077464a27c23db1ca761;hpb=66da8a6041be849ef722f5cb9a6cd77db72b79cf;p=fio.git diff --git a/iolog.c b/iolog.c index 2b7b0bab..f0ce3b25 100644 --- a/iolog.c +++ b/iolog.c @@ -346,7 +346,7 @@ static int read_iolog2(struct thread_data *td, FILE *f) unsigned long long offset; unsigned int bytes; int reads, writes, waits, fileno = 0, file_action = 0; /* stupid gcc */ - char *fname, *act; + char *rfname, *fname, *act; char *str, *p; enum fio_ddir rw; @@ -357,7 +357,7 @@ static int read_iolog2(struct thread_data *td, FILE *f) * for doing verifications. */ str = malloc(4096); - fname = malloc(256+16); + rfname = fname = malloc(256+16); act = malloc(256+16); reads = writes = waits = 0; @@ -365,8 +365,12 @@ static int read_iolog2(struct thread_data *td, FILE *f) struct io_piece *ipo; int r; - r = sscanf(p, "%256s %256s %llu %u", fname, act, &offset, + r = sscanf(p, "%256s %256s %llu %u", rfname, act, &offset, &bytes); + + if (td->o.replay_redirect) + fname = td->o.replay_redirect; + if (r == 4) { /* * Check action first @@ -421,6 +425,8 @@ static int read_iolog2(struct thread_data *td, FILE *f) continue; writes++; } else if (rw == DDIR_WAIT) { + if (td->o.no_stall) + continue; waits++; } else if (rw == DDIR_INVAL) { } else if (!ddir_sync(rw)) { @@ -451,7 +457,7 @@ static int read_iolog2(struct thread_data *td, FILE *f) free(str); free(act); - free(fname); + free(rfname); if (writes && read_only) { log_err("fio: <%s> skips replay of %d writes due to" @@ -1065,7 +1071,7 @@ void flush_log(struct io_log *log, bool do_append) cur_log = flist_first_entry(&log->io_logs, struct io_logs, list); flist_del_init(&cur_log->list); - if (log == log->td->clat_hist_log) + if (log->td && log == log->td->clat_hist_log) flush_hist_samples(f, log->hist_coarseness, cur_log->log, log_sample_sz(log, cur_log)); else @@ -1153,7 +1159,8 @@ static int gz_work(struct iolog_flush_data *data) data->log->filename); do { if (c) - dprint(FD_COMPRESS, "seq=%d, chunk=%lu\n", seq, c->len); + dprint(FD_COMPRESS, "seq=%d, chunk=%lu\n", seq, + (unsigned long) c->len); c = get_new_chunk(seq); stream.avail_out = GZ_CHUNK; stream.next_out = c->buf; @@ -1190,7 +1197,7 @@ static int gz_work(struct iolog_flush_data *data) total -= c->len; c->len = GZ_CHUNK - stream.avail_out; total += c->len; - dprint(FD_COMPRESS, "seq=%d, chunk=%lu\n", seq, c->len); + dprint(FD_COMPRESS, "seq=%d, chunk=%lu\n", seq, (unsigned long) c->len); if (ret != Z_STREAM_END) { do { @@ -1201,7 +1208,8 @@ static int gz_work(struct iolog_flush_data *data) c->len = GZ_CHUNK - stream.avail_out; total += c->len; flist_add_tail(&c->list, &list); - dprint(FD_COMPRESS, "seq=%d, chunk=%lu\n", seq, c->len); + dprint(FD_COMPRESS, "seq=%d, chunk=%lu\n", seq, + (unsigned long) c->len); } while (ret != Z_STREAM_END); }