X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=ioengines.c;h=87db11ced12cf4c3b95408c82041ca3ee266ee7c;hp=979ac28322fdff473b31dbda5a3240cced718324;hb=4d4e80f2b4260f2c8b37a8612ce655502a799f7a;hpb=163f849eea2b0ce443825fa510a1cb311092a234 diff --git a/ioengines.c b/ioengines.c index 979ac283..87db11ce 100644 --- a/ioengines.c +++ b/ioengines.c @@ -168,10 +168,14 @@ int td_io_prep(struct thread_data *td, struct io_u *io_u) dprint_io_u(io_u, "prep"); fio_ro_check(td, io_u); + lock_file(td, io_u->file, io_u->ddir); + if (td->io_ops->prep) { int ret = td->io_ops->prep(td, io_u); dprint(FD_IO, "->prep(%p)=%d\n", io_u, ret); + if (ret) + unlock_file(td, io_u->file); return ret; } @@ -228,6 +232,8 @@ int td_io_queue(struct thread_data *td, struct io_u *io_u) ret = td->io_ops->queue(td, io_u); + unlock_file(td, io_u->file); + if (ret != FIO_Q_BUSY) io_u_mark_depth(td, io_u); @@ -303,7 +309,6 @@ int td_io_open_file(struct thread_data *td, struct fio_file *f) } f->last_free_lookup = 0; - f->last_completed_pos = 0; f->last_pos = f->file_offset; f->flags |= FIO_FILE_OPEN; f->flags &= ~FIO_FILE_CLOSING; @@ -344,7 +349,7 @@ err: return 1; } -void td_io_close_file(struct thread_data *td, struct fio_file *f) +int td_io_close_file(struct thread_data *td, struct fio_file *f) { if (!(f->flags & FIO_FILE_CLOSING)) log_file(td, f, FIO_LOG_CLOSE_FILE); @@ -354,5 +359,7 @@ void td_io_close_file(struct thread_data *td, struct fio_file *f) */ f->flags |= FIO_FILE_CLOSING; - put_file(td, f); + unlock_file_all(td, f); + + return put_file(td, f); }