Unify and fixup error handling
[fio.git] / fio.h
diff --git a/fio.h b/fio.h
index ff59b467ba70dcf478959da266f681ec2495c9e7..e5e754a903a0a50cb7c80e6dd7717d7591c89e35 100644 (file)
--- a/fio.h
+++ b/fio.h
@@ -18,7 +18,9 @@
 #include "arch.h"
 #include "os.h"
 
+#ifdef FIO_HAVE_SYSLET
 #include "syslet.h"
+#endif
 
 enum fio_ddir {
        DDIR_READ = 0,
@@ -70,7 +72,6 @@ struct io_piece {
 #ifdef FIO_HAVE_SYSLET
 struct syslet_req {
        struct syslet_uatom atom;
-       unsigned long cmd;
        long ret;
 };
 #endif
@@ -90,8 +91,7 @@ struct io_u {
                struct sg_io_hdr hdr;
 #endif
 #ifdef FIO_HAVE_SYSLET
-               struct syslet_req rw_atom;
-               struct syslet_req seek_atom;
+               struct syslet_req req;
 #endif
        };
        struct timeval start_time;
@@ -129,6 +129,14 @@ struct io_u {
        struct list_head list;
 };
 
+/*
+ * io_ops->queue() return values
+ */
+enum {
+       FIO_Q_COMPLETED = 0,            /* completed sync */
+       FIO_Q_QUEUED    = 1,            /* queued, will complete async */
+};
+
 #define FIO_HDR_MAGIC  0xf00baaef
 
 enum {
@@ -196,7 +204,7 @@ struct fio_file {
         */
        union {
                unsigned long file_data;
-               long fd;
+               int fd;
        };
        char *file_name;
        void *mmap;
@@ -220,6 +228,7 @@ struct fio_file {
  * How many depth levels to log
  */
 #define FIO_IO_U_MAP_NR        8
+#define FIO_IO_U_LAT_NR 12
 
 /*
  * This describes a single thread/process executing a fio job.
@@ -273,6 +282,7 @@ struct thread_data {
        unsigned int hugepage_size;
        unsigned int rw_min_bs;
        unsigned int thinktime;
+       unsigned int thinktime_spin;
        unsigned int thinktime_blocks;
        unsigned int fsync_blocks;
        unsigned int start_delay;
@@ -320,6 +330,7 @@ struct thread_data {
         */
        unsigned int cur_depth;
        unsigned int io_u_map[FIO_IO_U_MAP_NR];
+       unsigned int io_u_lat[FIO_IO_U_LAT_NR];
        unsigned long total_io_u;
        struct list_head io_u_freelist;
        struct list_head io_u_busylist;
@@ -483,8 +494,10 @@ struct disk_util {
 /*
  * Used for passing io_u completion data
  */
+typedef int (icd_handler)(struct io_u *);
 struct io_completion_data {
        int nr;                         /* input */
+       icd_handler *handler;           /* input */
 
        int error;                      /* output */
        unsigned long bytes_done[2];    /* output */
@@ -586,7 +599,7 @@ enum {
  */
 extern void populate_verify_io_u(struct thread_data *, struct io_u *);
 extern int get_next_verify(struct thread_data *td, struct io_u *);
-extern int do_io_u_verify(struct thread_data *, struct io_u **);
+extern int verify_io_u(struct io_u *);
 
 /*
  * Memory helpers
@@ -605,6 +618,7 @@ extern struct io_u *get_io_u(struct thread_data *, struct fio_file *);
 extern void put_io_u(struct thread_data *, struct io_u *);
 extern void ios_completed(struct thread_data *, struct io_completion_data *);
 extern void io_completed(struct thread_data *, struct io_u *, struct io_completion_data *);
+extern void init_icd(struct io_completion_data *, icd_handler *, int);
 
 /*
  * io engine entry points
@@ -663,9 +677,10 @@ struct ioengine_ops {
        void (*cleanup)(struct thread_data *);
        void *data;
        void *dlhandle;
+       unsigned long priv;
 };
 
-#define FIO_IOOPS_VERSION      3
+#define FIO_IOOPS_VERSION      4
 
 extern struct ioengine_ops *load_ioengine(struct thread_data *, const char *);
 extern int register_ioengine(struct ioengine_ops *);