Hi Jens, I know you're very busy. Have you had a chance to look at this change? I need this for the next patch: "[PATCH V3] Adds verify_only option". Best regards, Juan On Thu, Sep 5, 2013 at 8:10 PM, Juan Casse <jcasse@xxxxxxxxxxxx> wrote: > Currently, fio checks the block offset number in a block's header during > the verify phase. > We add a check for the io number (numberio) to detect stale blocks. This > check is performed only on workloads that write data, as those workloads > know what numberio was written to each block. > td->io_issues[ddir] = 0; was removed so that numberio does not get reset > at each iteration; we want numberio to keep incrementing to reflect > how many times the same data was written. > > Signed-off-by: Juan Casse <jcasse@xxxxxxxxxxxx> > Reviewed-by: Grant Grundler <grundler@xxxxxxxxxxxx> > > Fixed typo. > --- > ioengine.h | 1 + > iolog.c | 1 + > iolog.h | 1 + > libfio.c | 1 - > verify.c | 14 +++++++++++++- > 5 files changed, 16 insertions(+), 2 deletions(-) > > diff --git a/ioengine.h b/ioengine.h > index 31662eb..812febd 100644 > --- a/ioengine.h > +++ b/ioengine.h > @@ -50,6 +50,7 @@ struct io_u { > */ > unsigned long buflen; > unsigned long long offset; > + unsigned short numberio; > void *buf; > > /* > diff --git a/iolog.c b/iolog.c > index 9bcf0d8..6459d3b 100644 > --- a/iolog.c > +++ b/iolog.c > @@ -188,6 +188,7 @@ void log_io_piece(struct thread_data *td, struct io_u *io_u) > ipo->file = io_u->file; > ipo->offset = io_u->offset; > ipo->len = io_u->buflen; > + ipo->numberio = io_u->numberio; > > if (io_u_should_trim(td, io_u)) { > flist_add_tail(&ipo->trim_list, &td->trim_list); > diff --git a/iolog.h b/iolog.h > index 8fedc19..94e0fc1 100644 > --- a/iolog.h > +++ b/iolog.h > @@ -78,6 +78,7 @@ struct io_piece { > struct fio_file *file; > }; > unsigned long long offset; > + unsigned short numberio; > unsigned long len; > unsigned int flags; > enum fio_ddir ddir; > diff --git a/libfio.c b/libfio.c > index c26d6a3..6e290f4 100644 > --- a/libfio.c > +++ b/libfio.c > @@ -83,7 +83,6 @@ static void reset_io_counters(struct thread_data *td) > td->this_io_blocks[ddir] = 0; > td->rate_bytes[ddir] = 0; > td->rate_blocks[ddir] = 0; > - td->io_issues[ddir] = 0; > } > td->zone_bytes = 0; > > diff --git a/verify.c b/verify.c > index 9e88d61..63def12 100644 > --- a/verify.c > +++ b/verify.c > @@ -369,6 +369,15 @@ static int verify_io_u_meta(struct verify_header *hdr, struct vcont *vc) > if (td->o.verify_pattern_bytes) > ret |= verify_io_u_pattern(hdr, vc); > > + /* > + * For read-only workloads, the program cannot be certain of the > + * last numberio written to a block. Checking of numberio will be done > + * only for workloads that write data. > + */ > + if (td_write(td) || td_rw(td)) > + if (vh->numberio != io_u->numberio) > + ret = EILSEQ; > + > if (!ret) > return 0; > > @@ -768,7 +777,7 @@ static void fill_meta(struct verify_header *hdr, struct thread_data *td, > vh->time_sec = io_u->start_time.tv_sec; > vh->time_usec = io_u->start_time.tv_usec; > > - vh->numberio = td->io_issues[DDIR_WRITE]; > + vh->numberio = io_u->numberio; > > vh->offset = io_u->offset + header_num * td->o.verify_interval; > } > @@ -942,6 +951,8 @@ void populate_verify_io_u(struct thread_data *td, struct io_u *io_u) > if (td->o.verify == VERIFY_NULL) > return; > > + io_u->numberio = td->io_issues[io_u->ddir]; > + > fill_pattern_headers(td, io_u, 0, 0); > } > > @@ -974,6 +985,7 @@ int get_next_verify(struct thread_data *td, struct io_u *io_u) > > io_u->offset = ipo->offset; > io_u->buflen = ipo->len; > + io_u->numberio = ipo->numberio; > io_u->file = ipo->file; > io_u->flags |= IO_U_F_VER_LIST; > > -- > 1.7.12.4 > -- To unsubscribe from this list: send the line "unsubscribe fio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html