X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=ioengine.h;h=31662ebeb5eea6af9012d921a9ce368cb0551a8e;hp=55039578d9edad878519cde64b665ea81c5e2b0f;hb=3c568239a319087a965b06bc2ed94d058810100f;hpb=d7213923067aa49922962a469a691c3ec951064d diff --git a/ioengine.h b/ioengine.h index 55039578..31662ebe 100644 --- a/ioengine.h +++ b/ioengine.h @@ -15,7 +15,7 @@ #include #endif -#define FIO_IOOPS_VERSION 15 +#define FIO_IOOPS_VERSION 16 enum { IO_U_F_FREE = 1 << 0, @@ -28,36 +28,10 @@ enum { IO_U_F_VER_LIST = 1 << 7, }; -struct thread_data; - /* * The io unit */ struct io_u { - union { -#ifdef CONFIG_LIBAIO - struct iocb iocb; -#endif -#ifdef CONFIG_POSIXAIO - os_aiocb_t aiocb; -#endif -#ifdef FIO_HAVE_SGIO - struct sg_io_hdr hdr; -#endif -#ifdef CONFIG_GUASI - guasi_req_t greq; -#endif -#ifdef CONFIG_SOLARISAIO - aio_result_t resultp; -#endif -#ifdef FIO_HAVE_BINJECT - struct b_user_cmd buc; -#endif -#ifdef CONFIG_RDMA - struct ibv_mr *mr; -#endif - void *mmap_data; - }; struct timeval start_time; struct timeval issue_time; @@ -96,6 +70,31 @@ struct io_u { */ unsigned long buf_filled_len; + union { +#ifdef CONFIG_LIBAIO + struct iocb iocb; +#endif +#ifdef CONFIG_POSIXAIO + os_aiocb_t aiocb; +#endif +#ifdef FIO_HAVE_SGIO + struct sg_io_hdr hdr; +#endif +#ifdef CONFIG_GUASI + guasi_req_t greq; +#endif +#ifdef CONFIG_SOLARISAIO + aio_result_t resultp; +#endif +#ifdef FIO_HAVE_BINJECT + struct b_user_cmd buc; +#endif +#ifdef CONFIG_RDMA + struct ibv_mr *mr; +#endif + void *mmap_data; + }; + unsigned int resid; unsigned int error; @@ -108,7 +107,7 @@ struct io_u { void *engine_data; }; - struct flist_head list; + struct flist_head verify_list; /* * Callback for io completion @@ -162,6 +161,7 @@ enum fio_ioengine_flags { FIO_PIPEIO = 1 << 7, /* input/output no seekable */ FIO_BARRIER = 1 << 8, /* engine supports barriers */ FIO_MEMALIGN = 1 << 9, /* engine wants aligned memory */ + FIO_BIT_BASED = 1 << 10, /* engine uses a bit base (e.g. uses Kbit as opposed to KB) */ }; /* @@ -188,7 +188,7 @@ extern int fio_show_ioengine_help(const char *engine); /* * io unit handling */ -#define queue_full(td) flist_empty(&(td)->io_u_freelist) +#define queue_full(td) io_u_qempty(&(td)->io_u_freelist) extern struct io_u *__get_io_u(struct thread_data *); extern struct io_u *get_io_u(struct thread_data *); extern void put_io_u(struct thread_data *, struct io_u *); @@ -197,8 +197,10 @@ 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 void io_u_queued(struct thread_data *, struct io_u *); +extern void 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);