X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=ioengine.h;h=7249df6a9705c5089dab08d732835c6643fe35e0;hp=37f0336a616d2e107e6eb509aad54fb3753ffafa;hb=356ef1a19ee4487ece7b4295347b37491d2bf727;hpb=0d593542dd59324fa8a6956716a1278732812af2 diff --git a/ioengine.h b/ioengine.h index 37f0336a..7249df6a 100644 --- a/ioengine.h +++ b/ioengine.h @@ -7,6 +7,7 @@ #include "io_ddir.h" #include "debug.h" #include "file.h" +#include "workqueue.h" #ifdef CONFIG_LIBAIO #include @@ -15,7 +16,7 @@ #include #endif -#define FIO_IOOPS_VERSION 22 +#define FIO_IOOPS_VERSION 23 enum { IO_U_F_FREE = 1 << 0, @@ -89,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 @@ -119,7 +123,6 @@ struct io_u { struct ibv_mr *mr; #endif void *mmap_data; - uint64_t null; }; }; @@ -134,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 *); @@ -153,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 { @@ -234,12 +237,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) @@ -253,14 +253,9 @@ static inline enum fio_ddir acct_ddir(struct io_u *io_u) return io_u->ddir; } -static inline void io_u_clear(struct io_u *io_u, unsigned int flags) -{ - __sync_fetch_and_and(&io_u->flags, ~flags); -} - -static inline void io_u_set(struct io_u *io_u, unsigned int flags) -{ - __sync_fetch_and_or(&io_u->flags, flags); -} +#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