X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=ioengine.h;h=08e8fabfacecb5b57996ba9dbec9bc87e9704d03;hp=c557f7a8c2f2545a3bd0b2cae2e99df0f58d5523;hb=926098e098d342b7be0aa739e094b0d679730bb1;hpb=e39c0676d1af779004194ae4b3cc111db49bef7a diff --git a/ioengine.h b/ioengine.h index c557f7a8..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 { @@ -214,7 +218,7 @@ 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 *); 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); @@ -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