static int fio_netio_prep(struct thread_data *td, struct io_u *io_u)
{
struct netio_data *nd = td->io_ops->data;
- struct fio_file *f = io_u->file;
/*
* Make sure we don't see spurious reads to a receiver, and vice versa
return 1;
}
- if (io_u->ddir == DDIR_SYNC)
- return 0;
- if (io_u->offset == f->last_completed_pos)
- return 0;
-
- /*
- * If offset is different from last end position, it's a seek.
- * As network io is purely sequential, we don't allow seeks.
- */
- td_verror(td, EINVAL, "cannot seek");
- return 1;
+ return 0;
}
static int splice_io_u(int fdin, int fdout, unsigned int len)
struct netio_data *nd = td->io_ops->data;
int ret;
+ fio_ro_check(td, io_u);
+
if (io_u->ddir == DDIR_WRITE) {
if (nd->use_splice)
ret = fio_netio_splice_out(td, io_u);
.cleanup = fio_netio_cleanup,
.open_file = fio_netio_open_file,
.close_file = generic_close_file,
- .flags = FIO_SYNCIO | FIO_DISKLESSIO,
+ .flags = FIO_SYNCIO | FIO_DISKLESSIO | FIO_UNIDIR |
+ FIO_SIGQUIT,
};
static struct ioengine_ops ioengine_splice = {
.cleanup = fio_netio_cleanup,
.open_file = fio_netio_open_file,
.close_file = generic_close_file,
- .flags = FIO_SYNCIO | FIO_DISKLESSIO,
+ .flags = FIO_SYNCIO | FIO_DISKLESSIO | FIO_UNIDIR |
+ FIO_SIGQUIT,
};
static void fio_init fio_netio_register(void)