X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=log.c;h=d4850a5290c6d375caba0fd019f70d4b77cf5236;hp=ce4ac9f4126be3de8b93cd6fd843c633368ad3aa;hb=b921e2e2ff27d9aebc616e77afc4699c036682fe;hpb=ff58fcede39d16a2c642897cbe5a7f28b2da1950 diff --git a/log.c b/log.c index ce4ac9f4..d4850a52 100644 --- a/log.c +++ b/log.c @@ -9,6 +9,7 @@ #include "flist.h" #include "fio.h" #include "verify.h" +#include "trim.h" static const char iolog_ver2[] = "fio version 2 iolog"; @@ -115,6 +116,7 @@ int read_iolog_get(struct thread_data *td, struct io_u *io_u) ipo = flist_entry(td->io_log_list.next, struct io_piece, list); flist_del(&ipo->list); + remove_trim_entry(td, ipo); ret = ipo_special(td, ipo); if (ret < 0) { @@ -160,6 +162,7 @@ void prune_io_piece_log(struct thread_data *td) while ((n = rb_first(&td->io_hist_tree)) != NULL) { ipo = rb_entry(n, struct io_piece, rb_node); rb_erase(n, &td->io_hist_tree); + remove_trim_entry(td, ipo); td->io_hist_len--; free(ipo); } @@ -167,6 +170,7 @@ void prune_io_piece_log(struct thread_data *td) while (!flist_empty(&td->io_hist_list)) { ipo = flist_entry(td->io_hist_list.next, struct io_piece, list); flist_del(&ipo->list); + remove_trim_entry(td, ipo); td->io_hist_len--; free(ipo); } @@ -181,10 +185,16 @@ void log_io_piece(struct thread_data *td, struct io_u *io_u) struct io_piece *ipo, *__ipo; ipo = malloc(sizeof(struct io_piece)); + init_ipo(ipo); ipo->file = io_u->file; ipo->offset = io_u->offset; ipo->len = io_u->buflen; + if (io_u_should_trim(td, io_u)) { + flist_add_tail(&ipo->trim_list, &td->trim_list); + td->trim_entries++; + } + /* * We don't need to sort the entries, if: * @@ -203,6 +213,7 @@ void log_io_piece(struct thread_data *td, struct io_u *io_u) (file_randommap(td, ipo->file) || td->o.verify == VERIFY_NONE)) { INIT_FLIST_HEAD(&ipo->list); flist_add_tail(&ipo->list, &td->io_hist_list); + ipo->flags |= IP_F_ONLIST; td->io_hist_len++; return; } @@ -231,6 +242,7 @@ restart: assert(ipo->len == __ipo->len); td->io_hist_len--; rb_erase(parent, &td->io_hist_tree); + remove_trim_entry(td, __ipo); free(__ipo); goto restart; } @@ -238,6 +250,7 @@ restart: rb_link_node(&ipo->rb_node, parent, p); rb_insert_color(&ipo->rb_node, &td->io_hist_tree); + ipo->flags |= IP_F_ONRB; td->io_hist_len++; } @@ -345,8 +358,7 @@ static int read_iolog2(struct thread_data *td, FILE *f) * Make note of file */ ipo = malloc(sizeof(*ipo)); - memset(ipo, 0, sizeof(*ipo)); - INIT_FLIST_HEAD(&ipo->list); + init_ipo(ipo); ipo->ddir = rw; if (rw == DDIR_WAIT) { ipo->delay = offset; @@ -403,6 +415,7 @@ static int init_iolog_read(struct thread_data *td) if (!p) { td_verror(td, errno, "iolog read"); log_err("fio: unable to read iolog\n"); + fclose(f); return 1; }