At the time I've wrote this code i don't quite understand difference between td->error and io_u->error. It is appeared that engine should not have to explicitly assign td->error. Just initialize io_u->error and backed will do proper handling. Signed-off-by: Dmitry Monakhov <dmonakhov@xxxxxxxxxx> --- engines/e4defrag.c | 18 ++++++------------ engines/falloc.c | 5 +---- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/engines/e4defrag.c b/engines/e4defrag.c index 5affaa0..cc88493 100644 --- a/engines/e4defrag.c +++ b/engines/e4defrag.c @@ -141,16 +141,14 @@ static int fio_e4defrag_queue(struct thread_data *td, struct io_u *io_u) * in order to satisfy strict read only access pattern */ if (io_u->ddir != DDIR_WRITE) { - io_u->error = errno; + io_u->error = EINVAL; return FIO_Q_COMPLETED; } if (o->inplace) { ret = fallocate(ed->donor_fd, 0, io_u->offset, io_u->xfer_buflen); - if (ret) { - io_u->error = errno; + if (ret) goto out; - } } memset(&me, 0, sizeof(me)); @@ -175,16 +173,12 @@ static int fio_e4defrag_queue(struct thread_data *td, struct io_u *io_u) } if (ret) io_u->error = errno; - - if (o->inplace) { + + if (o->inplace) ret = ftruncate(ed->donor_fd, 0); - if (ret) - io_u->error = errno; - } out: - if (io_u->error) - td_verror(td, errno, "xfer"); - + if (ret && !io_u->error) + io_u->error = errno; return FIO_Q_COMPLETED; } diff --git a/engines/falloc.c b/engines/falloc.c index 4977d9e..bc5ebd7 100644 --- a/engines/falloc.c +++ b/engines/falloc.c @@ -86,11 +86,8 @@ static int fio_fallocate_queue(struct thread_data *td, struct io_u *io_u) ret = fallocate(f->fd, flags, io_u->offset, io_u->xfer_buflen); - if (ret) { + if (ret) io_u->error = errno; - if (io_u->error) - td_verror(td, io_u->error, "xfer"); - } if (io_u->file && ret == 0 && ddir_rw(io_u->ddir)) io_u->file->file_pos = io_u->offset + ret; -- 1.7.7.6 -- To unsubscribe from this list: send the line "unsubscribe fio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html