[PATCH] Make ->buflen == 0 on SYNC io_u's
[fio.git] / fio.h
diff --git a/fio.h b/fio.h
index 921282cc61cb8bcc741934689c4381217221456b..967c42e678b899030df7b6b0229a8e39cc8706ad 100644 (file)
--- a/fio.h
+++ b/fio.h
@@ -113,6 +113,7 @@ struct group_run_stats {
 enum fio_ddir {
        DDIR_READ = 0,
        DDIR_WRITE,
+       DDIR_SYNC,
 };
 
 /*
@@ -184,6 +185,7 @@ struct thread_data {
        enum fio_ddir ddir;
        unsigned int iomix;
        unsigned int ioprio;
+       unsigned int last_was_sync;
 
        unsigned char sequential;
        unsigned char odirect;
@@ -365,6 +367,18 @@ extern struct thread_data *threads;
 
 #define MAX_JOBS       (1024)
 
+static inline int should_fsync(struct thread_data *td)
+{
+       if (td->last_was_sync)
+               return 0;
+       if (td->odirect)
+               return 0;
+       if (td_write(td) || td_rw(td) || td->override_sync)
+               return 1;
+
+       return 0;
+}
+
 struct disk_util_stat {
        unsigned ios[2];
        unsigned merges[2];
@@ -554,12 +568,11 @@ struct ioengine_ops {
        struct io_u *(*event)(struct thread_data *, int);
        int (*cancel)(struct thread_data *, struct io_u *);
        void (*cleanup)(struct thread_data *);
-       int (*sync)(struct thread_data *, struct fio_file *);
        void *data;
        void *dlhandle;
 };
 
-#define FIO_IOOPS_VERSION      2
+#define FIO_IOOPS_VERSION      3
 
 extern struct ioengine_ops *load_ioengine(struct thread_data *, char *);
 extern void close_ioengine(struct thread_data *);