gfio: add gerror.c for reporting errors
[fio.git] / ioengine.h
index c56bd5058222ab438f7039d20847254f900f0160..b4bc22b8968b00039989734ebc720567ff72f340 100644 (file)
@@ -1,7 +1,12 @@
 #ifndef FIO_IOENGINE_H
 #define FIO_IOENGINE_H
 
-#define FIO_IOOPS_VERSION      12
+#include "compiler/compiler.h"
+#include "io_ddir.h"
+#include "debug.h"
+#include "file.h"
+
+#define FIO_IOOPS_VERSION      13
 
 enum {
        IO_U_F_FREE             = 1 << 0,
@@ -11,8 +16,11 @@ enum {
        IO_U_F_BUSY_OK          = 1 << 4,
        IO_U_F_TRIMMED          = 1 << 5,
        IO_U_F_BARRIER          = 1 << 6,
+       IO_U_F_VER_LIST         = 1 << 7,
 };
 
+struct thread_data;
+
 /*
  * The io unit
  */
@@ -22,7 +30,7 @@ struct io_u {
                struct iocb iocb;
 #endif
 #ifdef FIO_HAVE_POSIXAIO
-               struct aiocb aiocb;
+               os_aiocb_t aiocb;
 #endif
 #ifdef FIO_HAVE_SGIO
                struct sg_io_hdr hdr;
@@ -35,6 +43,9 @@ struct io_u {
 #endif
 #ifdef FIO_HAVE_BINJECT
                struct b_user_cmd buc;
+#endif
+#ifdef FIO_HAVE_RDMA
+               struct ibv_mr *mr;
 #endif
                void *mmap_data;
        };
@@ -118,6 +129,8 @@ struct ioengine_ops {
        int (*open_file)(struct thread_data *, struct fio_file *);
        int (*close_file)(struct thread_data *, struct fio_file *);
        int (*get_file_size)(struct thread_data *, struct fio_file *);
+       int option_struct_size;
+       struct fio_option *options;
        void *data;
        void *dlhandle;
 };
@@ -127,7 +140,7 @@ enum fio_ioengine_flags {
        FIO_RAWIO       = 1 << 1,       /* some sort of direct/raw io */
        FIO_DISKLESSIO  = 1 << 2,       /* no disk involved */
        FIO_NOEXTEND    = 1 << 3,       /* engine can't extend file */
-       FIO_NODISKUTIL  = 1 << 4,       /* diskutil can't handle filename */
+       FIO_NODISKUTIL  = 1 << 4,       /* diskutil can't handle filename */
        FIO_UNIDIR      = 1 << 5,       /* engine is uni-directional */
        FIO_NOIO        = 1 << 6,       /* thread does only pseudo IO */
        FIO_SIGTERM     = 1 << 7,       /* needs SIGTERM to exit */
@@ -152,8 +165,11 @@ extern int __must_check td_io_get_file_size(struct thread_data *, struct fio_fil
 extern struct ioengine_ops *load_ioengine(struct thread_data *, const char *);
 extern void register_ioengine(struct ioengine_ops *);
 extern void unregister_ioengine(struct ioengine_ops *);
+extern void free_ioengine(struct thread_data *);
 extern void close_ioengine(struct thread_data *);
 
+extern int fio_show_ioengine_help(const char *engine);
+
 /*
  * io unit handling
  */
@@ -168,7 +184,7 @@ extern int __must_check io_u_queued_complete(struct thread_data *, int, unsigned
 extern void io_u_queued(struct thread_data *, struct io_u *);
 extern void io_u_log_error(struct thread_data *, struct io_u *);
 extern void io_u_mark_depth(struct thread_data *, unsigned int);
-extern void io_u_fill_buffer(struct thread_data *td, struct io_u *, unsigned int);
+extern void io_u_fill_buffer(struct thread_data *td, struct io_u *, unsigned int, unsigned int);
 void io_u_mark_complete(struct thread_data *, unsigned int);
 void io_u_mark_submit(struct thread_data *, unsigned int);