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,
};
/*
unsigned long *file_map;
unsigned int num_maps;
-
- int fileno;
};
/*
struct thread_data {
char name[32];
char *directory;
+ char *filename;
char verror[80];
pthread_t thread;
int thread_number;
enum fio_filetype filetype;
struct fio_file *files;
unsigned int nr_files;
+ unsigned int nr_uniq_files;
unsigned int next_file;
int error;
pid_t pid;
enum fio_ddir ddir;
unsigned int iomix;
unsigned int ioprio;
+ unsigned int last_was_sync;
unsigned char sequential;
unsigned char odirect;
#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];
/*
* io engine entry points
*/
+extern int td_io_init(struct thread_data *);
extern int td_io_prep(struct thread_data *, struct io_u *);
extern int td_io_queue(struct thread_data *, struct io_u *);
extern int td_io_sync(struct thread_data *, struct fio_file *);
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 *);