projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
splice engine: return negative for error
[fio.git]
/
engines
/
splice.c
diff --git
a/engines/splice.c
b/engines/splice.c
index 5c4411cce3bcdfdecdfe3f40a5b2e0d3530fd66a..6d843538fb73bc01b0ee3e0f58701933fbddac3a 100644
(file)
--- 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 <stdio.h>
*
*/
#include <stdio.h>
@@
-45,7
+48,7
@@
static int fio_splice_read(struct thread_data *td, struct io_u *io_u)
if (errno == ENODATA || errno == EAGAIN)
continue;
if (errno == ENODATA || errno == EAGAIN)
continue;
- return errno;
+ return
-
errno;
}
buflen -= ret;
}
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)
while (ret) {
ret2 = read(sd->pipe[0], p, ret);
if (ret2 < 0)
- return errno;
+ return
-
errno;
ret -= ret2;
p += ret2;
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)
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;
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)
while (ret) {
ret2 = splice(sd->pipe[0], NULL, f->fd, &off, ret, 0);
if (ret2 < 0)
- return errno;
+ return
-
errno;
ret -= ret2;
}
ret -= ret2;
}
@@
-125,7
+128,7
@@
static int fio_spliceio_queue(struct thread_data *td, struct io_u *io_u)
}
if (io_u->error)
}
if (io_u->error)
- td_verror(td, io_u->error);
+ td_verror(td, io_u->error
, "xfer"
);
return FIO_Q_COMPLETED;
}
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) {
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;
}
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,
.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,
};
.flags = FIO_SYNCIO,
};