[PATCH] Abstract option handling
[fio.git] / fio.h
diff --git a/fio.h b/fio.h
index 015af8db476a5121a485bcfd349cb4efee1e1ec6..046171ae03c032243c19906ff8ce3e3afcba52c3 100644 (file)
--- a/fio.h
+++ b/fio.h
@@ -66,14 +66,20 @@ struct io_u {
        char *buf;
        unsigned int buflen;
        unsigned long long offset;
-       unsigned int index;
 
        unsigned int resid;
        unsigned int error;
 
-       unsigned char seen;
        unsigned char ddir;
 
+       /*
+        * io engine private data
+        */
+       union {
+               unsigned int index;
+               unsigned int seen;
+       };
+
        struct fio_file *file;
 
        struct list_head list;
@@ -107,6 +113,7 @@ struct group_run_stats {
 enum fio_ddir {
        DDIR_READ = 0,
        DDIR_WRITE,
+       DDIR_SYNC,
 };
 
 /*
@@ -151,8 +158,6 @@ struct fio_file {
 
        unsigned long *file_map;
        unsigned int num_maps;
-
-       int fileno;
 };
 
 /*
@@ -180,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;
@@ -219,6 +225,7 @@ struct thread_data {
        unsigned int write_iolog;
        unsigned int rwmixcycle;
        unsigned int rwmixread;
+       unsigned int rwmixwrite;
        unsigned int nice;
 
        char *iolog_file;
@@ -361,6 +368,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];
@@ -550,12 +569,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 *);