X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=engines%2Fsplice.c;h=6d843538fb73bc01b0ee3e0f58701933fbddac3a;hp=5c4411cce3bcdfdecdfe3f40a5b2e0d3530fd66a;hb=b4ba5f302c467dc10c8b89459a8cb97d2958f359;hpb=22819ec237297fc39435ed566bee01a4225bfb39 diff --git a/engines/splice.c b/engines/splice.c index 5c4411cc..6d843538 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 @@ -45,7 +48,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 +56,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 +90,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 +98,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 +128,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 +150,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 +165,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, };