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;
enum fio_ddir {
DDIR_READ = 0,
DDIR_WRITE,
+ DDIR_SYNC,
};
/*
* This describes a single thread/process executing a fio job.
*/
struct thread_data {
- char name[32];
+ char *name;
char *directory;
char *filename;
char verror[80];
enum fio_ddir ddir;
unsigned int iomix;
unsigned int ioprio;
+ unsigned int last_was_sync;
unsigned char sequential;
unsigned char odirect;
os_cpu_mask_t cpumask;
unsigned int iolog;
unsigned int read_iolog;
- unsigned int write_iolog;
unsigned int rwmixcycle;
unsigned int rwmixread;
+ unsigned int rwmixwrite;
unsigned int nice;
- char *iolog_file;
+ char *read_iolog_file;
+ char *write_iolog_file;
void *iolog_buf;
FILE *iolog_f;
#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];
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 struct ioengine_ops *load_ioengine(struct thread_data *, const char *);
extern void close_ioengine(struct thread_data *);
/*