X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=ioengines.c;h=230e846b2d52bf12b89e588fc19114ea4e833df6;hb=e01b22b8fe3f20376fe8fdc6f2c28cc3682d698e;hp=2969840706d18f75965c083c574531d9ff2fa7e0;hpb=9d7dfdaef1ed5f6227fd31117d310ac15ae63152;p=fio.git diff --git a/ioengines.c b/ioengines.c index 29698407..230e846b 100644 --- a/ioengines.c +++ b/ioengines.c @@ -17,6 +17,7 @@ #include #include "fio.h" +#include "diskutil.h" static FLIST_HEAD(engine_list); @@ -220,7 +221,7 @@ int td_io_queue(struct thread_data *td, struct io_u *io_u) assert((io_u->flags & IO_U_F_FLIGHT) == 0); io_u->flags |= IO_U_F_FLIGHT; - assert(io_u->file->flags & FIO_FILE_OPEN); + assert(fio_file_open(io_u->file)); io_u->error = 0; io_u->resid = 0; @@ -317,6 +318,9 @@ int td_io_commit(struct thread_data *td) int td_io_open_file(struct thread_data *td, struct fio_file *f) { + assert(!fio_file_open(f)); + assert(f->fd == -1); + if (td->io_ops->open_file(td, f)) { if (td->error == EINVAL && td->o.odirect) log_err("fio: destination does not support O_DIRECT\n"); @@ -326,12 +330,15 @@ int td_io_open_file(struct thread_data *td, struct fio_file *f) td->o.nr_files); } + assert(f->fd == -1); + assert(!fio_file_open(f)); return 1; } fio_file_reset(f); - f->flags |= FIO_FILE_OPEN; - f->flags &= ~FIO_FILE_CLOSING; + fio_file_set_open(f); + fio_file_clear_closing(f); + disk_util_inc(f->du); td->nr_open_files++; get_file(f); @@ -364,9 +371,6 @@ int td_io_open_file(struct thread_data *td, struct fio_file *f) } } - if (f->file_map) - memset(f->file_map, 0, f->num_maps * sizeof(int)); - #ifdef FIO_OS_DIRECTIO /* * Some OS's have a distinct call to mark the file non-buffered, @@ -386,6 +390,7 @@ done: log_file(td, f, FIO_LOG_OPEN_FILE); return 0; err: + disk_util_dec(f->du); if (td->io_ops->close_file) td->io_ops->close_file(td, f); return 1; @@ -393,14 +398,17 @@ err: int td_io_close_file(struct thread_data *td, struct fio_file *f) { - if (!(f->flags & FIO_FILE_CLOSING)) + assert(f->references); + + if (!fio_file_closing(f)) log_file(td, f, FIO_LOG_CLOSE_FILE); /* * mark as closing, do real close when last io on it has completed */ - f->flags |= FIO_FILE_CLOSING; + fio_file_set_closing(f); + disk_util_dec(f->du); unlock_file_all(td, f); return put_file(td, f);