Drop prototype of unused function td_io_sync()
[fio.git] / ioengine.h
index 85923fcee3fdc1ff2f75be2bdec79048fac00c26..dc2c26951747af7b61b198a53508d6ad1b67f34f 100644 (file)
@@ -7,6 +7,7 @@
 #include "io_ddir.h"
 #include "debug.h"
 #include "file.h"
+#include "workqueue.h"
 
 #ifdef CONFIG_LIBAIO
 #include <libaio.h>
@@ -15,7 +16,7 @@
 #include <guasi.h>
 #endif
 
-#define FIO_IOOPS_VERSION      21
+#define FIO_IOOPS_VERSION      23
 
 enum {
        IO_U_F_FREE             = 1 << 0,
@@ -45,12 +46,16 @@ struct io_u {
         */
        enum fio_ddir acct_ddir;
 
+       /*
+        * Write generation
+        */
+       unsigned short numberio;
+
        /*
         * Allocated/set buffer and length
         */
        unsigned long buflen;
        unsigned long long offset;
-       unsigned short numberio;
        void *buf;
 
        /*
@@ -85,7 +90,10 @@ struct io_u {
                void *engine_data;
        };
 
-       struct flist_head verify_list;
+       union {
+               struct flist_head verify_list;
+               struct workqueue_work work;
+       };
 
        /*
         * Callback for io completion
@@ -129,7 +137,7 @@ enum {
 
 struct ioengine_ops {
        struct flist_head list;
-       char name[16];
+       const char *name;
        int version;
        int flags;
        int (*setup)(struct thread_data *);
@@ -139,6 +147,7 @@ struct ioengine_ops {
        int (*commit)(struct thread_data *);
        int (*getevents)(struct thread_data *, unsigned int, unsigned int, const struct timespec *);
        struct io_u *(*event)(struct thread_data *, int);
+       char *(*errdetails)(struct io_u *);
        int (*cancel)(struct thread_data *, struct io_u *);
        void (*cleanup)(struct thread_data *);
        int (*open_file)(struct thread_data *, struct fio_file *);
@@ -147,12 +156,12 @@ struct ioengine_ops {
        int (*unlink_file)(struct thread_data *, struct fio_file *);
        int (*get_file_size)(struct thread_data *, struct fio_file *);
        void (*terminate)(struct thread_data *);
+       int (*iomem_alloc)(struct thread_data *, size_t);
+       void (*iomem_free)(struct thread_data *);
        int (*io_u_init)(struct thread_data *, struct io_u *);
        void (*io_u_free)(struct thread_data *, struct io_u *);
        int option_struct_size;
        struct fio_option *options;
-       void *data;
-       void *dlhandle;
 };
 
 enum fio_ioengine_flags {
@@ -181,7 +190,6 @@ typedef void (*get_ioengine_t)(struct ioengine_ops **);
 extern int __must_check td_io_init(struct thread_data *);
 extern int __must_check td_io_prep(struct thread_data *, struct io_u *);
 extern int __must_check td_io_queue(struct thread_data *, struct io_u *);
-extern int __must_check td_io_sync(struct thread_data *, struct fio_file *);
 extern int __must_check td_io_getevents(struct thread_data *, unsigned int, unsigned int, const struct timespec *);
 extern int __must_check td_io_commit(struct thread_data *);
 extern int __must_check td_io_open_file(struct thread_data *, struct fio_file *);
@@ -205,17 +213,17 @@ extern struct io_u *get_io_u(struct thread_data *);
 extern void put_io_u(struct thread_data *, struct io_u *);
 extern void clear_io_u(struct thread_data *, struct io_u *);
 extern void requeue_io_u(struct thread_data *, struct io_u **);
-extern int __must_check io_u_sync_complete(struct thread_data *, struct io_u *, uint64_t *);
-extern int __must_check io_u_queued_complete(struct thread_data *, int, uint64_t *);
+extern int __must_check io_u_sync_complete(struct thread_data *, struct io_u *);
+extern int __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_quiesce(struct thread_data *);
+extern int io_u_quiesce(struct thread_data *);
 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 fill_io_buffer(struct thread_data *, void *, unsigned int, 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);
-int queue_full(const struct thread_data *);
+bool queue_full(const struct thread_data *);
 
 int do_io_u_sync(const struct thread_data *, struct io_u *);
 int do_io_u_trim(const struct thread_data *, struct io_u *);
@@ -228,12 +236,9 @@ static inline void dprint_io_u(struct io_u *io_u, const char *p)
        dprint(FD_IO, "%s: io_u %p: off=%llu/len=%lu/ddir=%d", p, io_u,
                                        (unsigned long long) io_u->offset,
                                        io_u->buflen, io_u->ddir);
-       if (fio_debug & (1 << FD_IO)) {
-               if (f)
-                       log_info("/%s", f->file_name);
-
-               log_info("\n");
-       }
+       if (f)
+               dprint(FD_IO, "/%s", f->file_name);
+       dprint(FD_IO, "\n");
 }
 #else
 #define dprint_io_u(io_u, p)
@@ -247,4 +252,9 @@ static inline enum fio_ddir acct_ddir(struct io_u *io_u)
        return io_u->ddir;
 }
 
+#define io_u_clear(td, io_u, val)      \
+       td_flags_clear((td), &(io_u->flags), (val))
+#define io_u_set(td, io_u, val)                \
+       td_flags_set((td), &(io_u)->flags, (val))
+
 #endif