From 97af62cec418cd722fb43c6010d6430534e12353 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Tue, 22 May 2007 11:12:13 +0200 Subject: [PATCH] IO verification needs to open and grab a reference to a file Otherwise it can disappear in midair. Signed-off-by: Jens Axboe --- filesetup.c | 1 + io_u.c | 2 ++ verify.c | 11 +++++++++++ 3 files changed, 14 insertions(+) diff --git a/filesetup.c b/filesetup.c index d79fc610..93cddb1f 100644 --- a/filesetup.c +++ b/filesetup.c @@ -547,6 +547,7 @@ void add_file(struct thread_data *td, const char *fname) void get_file(struct fio_file *f) { + assert(f->flags & FIO_FILE_OPEN); f->references++; } diff --git a/io_u.c b/io_u.c index c824d7ec..6290ebbc 100644 --- a/io_u.c +++ b/io_u.c @@ -593,6 +593,8 @@ set_file: } } while (1); + assert(io_u->file->flags & FIO_FILE_OPEN); + if (td->zone_bytes >= td->o.zone_size) { td->zone_bytes = 0; f->last_pos += td->o.zone_skip; diff --git a/verify.c b/verify.c index 46e610d7..32e7a041 100644 --- a/verify.c +++ b/verify.c @@ -4,6 +4,7 @@ #include #include #include +#include #include "fio.h" @@ -171,6 +172,16 @@ 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->file = ipo->file; + + if ((io_u->file->flags & FIO_FILE_OPEN) == 0) { + int r = td_io_open_file(td, io_u->file); + + if (r) + return 1; + } + + get_file(ipo->file); + assert(io_u->file->flags & FIO_FILE_OPEN); io_u->ddir = DDIR_READ; io_u->xfer_buf = io_u->buf; io_u->xfer_buflen = io_u->buflen; -- 2.25.1