Prefix external io engine loading with 'external'
[fio.git] / fio.h
diff --git a/fio.h b/fio.h
index 8c46b3f905b2d9eb5b320ca96d05e2b8117b8e8d..6d0c9e31f36164db8062bfa6d2a2ab74ab1e65ce 100644 (file)
--- a/fio.h
+++ b/fio.h
@@ -28,6 +28,16 @@ enum fio_ddir {
        DDIR_SYNC,
 };
 
+enum td_ddir {
+       TD_DDIR_READ            = 1 << 0,
+       TD_DDIR_WRITE           = 1 << 1,
+       TD_DDIR_RAND            = 1 << 2,
+       TD_DDIR_RW              = TD_DDIR_READ | TD_DDIR_WRITE,
+       TD_DDIR_RANDREAD        = TD_DDIR_READ | TD_DDIR_RAND,
+       TD_DDIR_RANDWRITE       = TD_DDIR_WRITE | TD_DDIR_READ,
+       TD_DDIR_RANDRW          = TD_DDIR_RW | TD_DDIR_RAND,
+};
+
 /*
  * Use for maintaining statistics
  */
@@ -71,8 +81,9 @@ struct io_piece {
 
 #ifdef FIO_HAVE_SYSLET
 struct syslet_req {
-       struct syslet_uatom atom;
-       long ret;
+       struct syslet_uatom atom;       /* the atom to submit */
+       struct syslet_uatom *head;      /* head of the sequence */
+       long ret;                       /* syscall return value */
 };
 #endif
 
@@ -134,6 +145,11 @@ struct io_u {
        struct fio_file *file;
 
        struct list_head list;
+
+       /*
+        * Callback for io completion
+        */
+       int (*end_io)(struct io_u *);
 };
 
 /*
@@ -267,6 +283,7 @@ struct thread_stat {
  * This describes a single thread/process executing a fio job.
  */
 struct thread_data {
+       int pad;
        char *description;
        char *name;
        char *directory;
@@ -290,12 +307,10 @@ struct thread_data {
        size_t orig_buffer_size;
        volatile int terminate;
        volatile int runstate;
-       enum fio_ddir ddir;
-       unsigned int iomix;
+       enum td_ddir td_ddir;
        unsigned int ioprio;
        unsigned int last_was_sync;
 
-       unsigned int sequential;
        unsigned int odirect;
        unsigned int invalidate_cache;
        unsigned int create_serialize;
@@ -336,6 +351,7 @@ struct thread_data {
        unsigned int numjobs;
        unsigned int iodepth;
        unsigned int iodepth_low;
+       unsigned int iodepth_batch;
        os_cpu_mask_t cpumask;
        unsigned int iolog;
        unsigned int read_iolog;
@@ -374,6 +390,7 @@ struct thread_data {
        struct list_head io_u_freelist;
        struct list_head io_u_busylist;
        struct list_head io_u_requeues;
+       unsigned int io_u_queued;
 
        /*
         * Rate state
@@ -482,9 +499,10 @@ extern unsigned long long mlock_size;
 
 extern struct thread_data *threads;
 
-#define td_read(td)            ((td)->ddir == DDIR_READ)
-#define td_write(td)           ((td)->ddir == DDIR_WRITE)
-#define td_rw(td)              ((td)->iomix != 0)
+#define td_read(td)            ((td)->td_ddir & TD_DDIR_READ)
+#define td_write(td)           ((td)->td_ddir & TD_DDIR_WRITE)
+#define td_rw(td)              (((td)->td_ddir & TD_DDIR_RW) == TD_DDIR_RW)
+#define td_random(td)          ((td)->td_ddir & TD_DDIR_RAND)
 
 #define BLOCKS_PER_MAP         (8 * sizeof(long))
 #define TO_MAP_BLOCK(td, f, b) ((b) - ((f)->file_offset / (td)->rw_min_bs))
@@ -534,11 +552,6 @@ struct disk_util {
        struct timeval time;
 };
 
-/*
- * Callback for io completion
- */
-typedef int (endio_handler)(struct io_u *);
-
 #define DISK_UTIL_MSEC (250)
 
 #ifndef min
@@ -588,7 +601,7 @@ extern unsigned long time_since_now(struct timeval *);
 extern unsigned long mtime_since_genesis(void);
 extern void __usec_sleep(unsigned int);
 extern void usec_sleep(struct thread_data *, unsigned long);
-extern void rate_throttle(struct thread_data *, unsigned long, unsigned int, int);
+extern void rate_throttle(struct thread_data *, unsigned long, unsigned int);
 extern void fill_start_time(struct timeval *);
 extern void fio_gettime(struct timeval *, void *);
 extern void set_genesis_time(void);
@@ -653,8 +666,8 @@ extern struct io_u *__get_io_u(struct thread_data *);
 extern struct io_u *get_io_u(struct thread_data *);
 extern void put_io_u(struct thread_data *, struct io_u *);
 extern void requeue_io_u(struct thread_data *, struct io_u **);
-extern long __must_check io_u_sync_complete(struct thread_data *, struct io_u *, endio_handler *);
-extern long __must_check io_u_queued_complete(struct thread_data *, int, endio_handler *);
+extern long __must_check io_u_sync_complete(struct thread_data *, struct io_u *);
+extern long __must_check io_u_queued_complete(struct thread_data *, int);
 extern void io_u_queued(struct thread_data *, struct io_u *);
 extern void io_u_init_timeout(void);
 extern void io_u_set_timeout(struct thread_data *);