IO verification needs to open and grab a reference to a file
authorJens Axboe <jens.axboe@oracle.com>
Tue, 22 May 2007 09:12:13 +0000 (11:12 +0200)
committerJens Axboe <jens.axboe@oracle.com>
Tue, 22 May 2007 09:12:13 +0000 (11:12 +0200)
Otherwise it can disappear in midair.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
filesetup.c
io_u.c
verify.c

index d79fc61081278c934fd1c4aecbfe344666c75811..93cddb1f467b3aea77cfc3b858c1164e89da8964 100644 (file)
@@ -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 c824d7ecce4ef8246c9304c5f4a7ef77fa458a0d..6290ebbc6ffda5757ac686859cffb4d17ea18e7f 100644 (file)
--- 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;
index 46e610d713fd221d0e10b7cc74579f5ffb54fc10..32e7a041dec521b52574f0de1b9d37e28604f888 100644 (file)
--- a/verify.c
+++ b/verify.c
@@ -4,6 +4,7 @@
 #include <unistd.h>
 #include <fcntl.h>
 #include <string.h>
+#include <assert.h>
 
 #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;