X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=ioengine.h;h=08e8fabfacecb5b57996ba9dbec9bc87e9704d03;hp=37f0336a616d2e107e6eb509aad54fb3753ffafa;hb=efa72f25ae594fd1d7f8f1b207f95143a917d8f2;hpb=0d593542dd59324fa8a6956716a1278732812af2 diff --git a/ioengine.h b/ioengine.h index 37f0336a..08e8fabf 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 @@ -134,7 +138,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 +157,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 { @@ -253,14 +257,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