X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=engines%2Fsplice.c;h=b92da4a85577d1d945b354699861ff412ef6b1d7;hb=cca73aa73328c3cb4d78adf1e54345701eff29fd;hp=5c4411cce3bcdfdecdfe3f40a5b2e0d3530fd66a;hpb=22819ec237297fc39435ed566bee01a4225bfb39;p=fio.git diff --git a/engines/splice.c b/engines/splice.c index 5c4411cc..b92da4a8 100644 --- a/engines/splice.c +++ b/engines/splice.c @@ -1,5 +1,8 @@ /* - * splice io engine + * splice engine + * + * IO engine that transfers data by doing splices to/from pipes and + * the files. * */ #include @@ -10,7 +13,6 @@ #include #include "../fio.h" -#include "../os.h" #ifdef FIO_HAVE_SPLICE @@ -45,7 +47,7 @@ static int fio_splice_read(struct thread_data *td, struct io_u *io_u) if (errno == ENODATA || errno == EAGAIN) continue; - return errno; + return -errno; } buflen -= ret; @@ -53,7 +55,7 @@ static int fio_splice_read(struct thread_data *td, struct io_u *io_u) while (ret) { ret2 = read(sd->pipe[0], p, ret); if (ret2 < 0) - return errno; + return -errno; ret -= ret2; p += ret2; @@ -87,7 +89,7 @@ static int fio_splice_write(struct thread_data *td, struct io_u *io_u) ret = vmsplice(sd->pipe[1], iov, 1, SPLICE_F_NONBLOCK); if (ret < 0) - return errno; + return -errno; iov[0].iov_len -= ret; iov[0].iov_base += ret; @@ -95,7 +97,7 @@ static int fio_splice_write(struct thread_data *td, struct io_u *io_u) while (ret) { ret2 = splice(sd->pipe[0], NULL, f->fd, &off, ret, 0); if (ret2 < 0) - return errno; + return -errno; ret -= ret2; } @@ -125,7 +127,7 @@ static int fio_spliceio_queue(struct thread_data *td, struct io_u *io_u) } if (io_u->error) - td_verror(td, io_u->error); + td_verror(td, io_u->error, "xfer"); return FIO_Q_COMPLETED; } @@ -147,7 +149,7 @@ static int fio_spliceio_init(struct thread_data *td) struct spliceio_data *sd = malloc(sizeof(*sd)); if (pipe(sd->pipe) < 0) { - td_verror(td, errno); + td_verror(td, errno, "pipe"); free(sd); return 1; } @@ -162,6 +164,8 @@ static struct ioengine_ops ioengine = { .init = fio_spliceio_init, .queue = fio_spliceio_queue, .cleanup = fio_spliceio_cleanup, + .open_file = generic_open_file, + .close_file = generic_close_file, .flags = FIO_SYNCIO, };