Merge branch 'sync-fileop' of https://github.com/struschev/fio
* 'sync-fileop' of https://github.com/struschev/fio:
fio: add sync capability for file operations
diff --git a/engines/falloc.c b/engines/falloc.c
index 290b980..5bd5aa5 100644
--- a/engines/falloc.c
+++ b/engines/falloc.c
@@ -76,14 +76,18 @@
fio_ro_check(td, io_u);
- if (io_u->ddir == DDIR_READ)
- flags = FALLOC_FL_KEEP_SIZE;
- else if (io_u->ddir == DDIR_WRITE)
- flags = 0;
- else if (io_u->ddir == DDIR_TRIM)
- flags = FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE;
+ if (io_u->ddir != DDIR_SYNC) {
+ if (io_u->ddir == DDIR_READ)
+ flags = FALLOC_FL_KEEP_SIZE;
+ else if (io_u->ddir == DDIR_WRITE)
+ flags = 0;
+ else if (io_u->ddir == DDIR_TRIM)
+ flags = FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE;
- ret = fallocate(f->fd, flags, io_u->offset, io_u->xfer_buflen);
+ ret = fallocate(f->fd, flags, io_u->offset, io_u->xfer_buflen);
+ } else {
+ ret = do_io_u_sync(td, io_u);
+ }
if (ret)
io_u->error = errno;
diff --git a/engines/fileoperations.c b/engines/fileoperations.c
index e530335..ce3e7c3 100644
--- a/engines/fileoperations.c
+++ b/engines/fileoperations.c
@@ -264,6 +264,8 @@
static enum fio_q_status queue_io(struct thread_data *td, struct io_u *io_u)
{
+ if (io_u->ddir == DDIR_SYNC && do_io_u_sync(td, io_u))
+ io_u->error = errno;
return FIO_Q_COMPLETED;
}
diff --git a/engines/ftruncate.c b/engines/ftruncate.c
index d1757b7..70211e0 100644
--- a/engines/ftruncate.c
+++ b/engines/ftruncate.c
@@ -15,16 +15,17 @@
struct io_u *io_u)
{
struct fio_file *f = io_u->file;
- int ret;
+ int ret = 0;
fio_ro_check(td, io_u);
- if (io_u->ddir != DDIR_WRITE) {
+ if (io_u->ddir == DDIR_WRITE)
+ ret = ftruncate(f->fd, io_u->offset);
+ else if (io_u->ddir == DDIR_SYNC)
+ ret = do_io_u_sync(td, io_u);
+ else
io_u->error = EINVAL;
- return FIO_Q_COMPLETED;
- }
- ret = ftruncate(f->fd, io_u->offset);
if (ret)
io_u->error = errno;