X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=ioengines.c;h=51cf1ba40e13cd67549d552c1a879461cb383a83;hp=3ef0d032938a11062ba513fe5154ba9b6b04d678;hb=e9f484791ffd436f39bae0b601e6fc97942c1814;hpb=62977e09a378a713b31d64c63e15adcf9f6f9d9d diff --git a/ioengines.c b/ioengines.c index 3ef0d032..51cf1ba4 100644 --- a/ioengines.c +++ b/ioengines.c @@ -17,6 +17,7 @@ #include #include "fio.h" +#include "diskutil.h" static FLIST_HEAD(engine_list); @@ -220,13 +221,14 @@ 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; if (td->io_ops->flags & FIO_SYNCIO) { - fio_gettime(&io_u->issue_time, NULL); + if (fio_fill_issue_time(td)) + fio_gettime(&io_u->issue_time, NULL); /* * only used for iolog @@ -269,7 +271,8 @@ int td_io_queue(struct thread_data *td, struct io_u *io_u) } if ((td->io_ops->flags & FIO_SYNCIO) == 0) { - fio_gettime(&io_u->issue_time, NULL); + if (fio_fill_issue_time(td)) + fio_gettime(&io_u->issue_time, NULL); /* * only used for iolog @@ -328,8 +331,9 @@ int td_io_open_file(struct thread_data *td, struct fio_file *f) } 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); @@ -384,6 +388,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; @@ -391,15 +396,24 @@ err: int td_io_close_file(struct thread_data *td, struct fio_file *f) { - if (!(f->flags & FIO_FILE_CLOSING)) + 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); } + +int td_io_get_file_size(struct thread_data *td, struct fio_file *f) +{ + if (!td->io_ops->get_file_size) + return 0; + + return td->io_ops->get_file_size(td, f); +}