From: Dmitry Monakhov Date: Sun, 23 Sep 2012 17:49:53 +0000 (+0400) Subject: engine: fix error handling for e4defrag/falloc X-Git-Tag: fio-2.0.10~18 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=e12d2800f811cb64d376cfdaed9a1257f3fa9c99 engine: fix error handling for e4defrag/falloc 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 Signed-off-by: Jens Axboe --- diff --git a/engines/e4defrag.c b/engines/e4defrag.c index 5affaa08..cc884937 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 4977d9e2..bc5ebd71 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;