From: Tomohiro Kusumi Date: Tue, 28 Mar 2017 20:03:01 +0000 (+0300) Subject: Separate io_u from ioengine [3/3] - rename ioengine.h to ioengines.h X-Git-Tag: fio-2.19~4 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=618ee94c319c46c670d29c7cf71538ca2ace13b7 Separate io_u from ioengine [3/3] - rename ioengine.h to ioengines.h This is based on the previous commits which added a new header io_u.h and separated io_u related from ioengine.h and ioengines.c. Since now that ioengine.h and ioengines.c are 1:1 in their contents (i.e. prototypes and implementation), they should be based on the same name as well. This could possibly break outbox ioengines if they include ioengine.h, but all the inbox ones just include fio.h (probably because that's what engines/skeleton_external.c does), so the impact is probably limited, and fio doesn't guarantee anything to outbox ones anyway. Signed-off-by: Tomohiro Kusumi Signed-off-by: Jens Axboe --- diff --git a/fio.h b/fio.h index 806f7ed5..3955a819 100644 --- a/fio.h +++ b/fio.h @@ -25,7 +25,7 @@ #include "debug.h" #include "file.h" #include "io_ddir.h" -#include "ioengine.h" +#include "ioengines.h" #include "iolog.h" #include "helpers.h" #include "options.h" diff --git a/ioengine.h b/ioengine.h deleted file mode 100644 index f24f4df5..00000000 --- a/ioengine.h +++ /dev/null @@ -1,90 +0,0 @@ -#ifndef FIO_IOENGINE_H -#define FIO_IOENGINE_H - -#include "compiler/compiler.h" -#include "os/os.h" -#include "file.h" -#include "io_u.h" - -#define FIO_IOOPS_VERSION 23 - -/* - * io_ops->queue() return values - */ -enum { - FIO_Q_COMPLETED = 0, /* completed sync */ - FIO_Q_QUEUED = 1, /* queued, will complete async */ - FIO_Q_BUSY = 2, /* no more room, call ->commit() */ -}; - -struct ioengine_ops { - struct flist_head list; - const char *name; - int version; - int flags; - int (*setup)(struct thread_data *); - int (*init)(struct thread_data *); - int (*prep)(struct thread_data *, struct io_u *); - int (*queue)(struct thread_data *, struct io_u *); - 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 *); - int (*close_file)(struct thread_data *, struct fio_file *); - int (*invalidate)(struct thread_data *, struct fio_file *); - 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; -}; - -enum fio_ioengine_flags { - FIO_SYNCIO = 1 << 0, /* io engine has synchronous ->queue */ - FIO_RAWIO = 1 << 1, /* some sort of direct/raw io */ - FIO_DISKLESSIO = 1 << 2, /* no disk involved */ - FIO_NOEXTEND = 1 << 3, /* engine can't extend file */ - FIO_NODISKUTIL = 1 << 4, /* diskutil can't handle filename */ - FIO_UNIDIR = 1 << 5, /* engine is uni-directional */ - FIO_NOIO = 1 << 6, /* thread does only pseudo IO */ - 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) */ - FIO_FAKEIO = 1 << 11, /* engine pretends to do IO */ -}; - -/* - * External engine defined symbol to fill in the engine ops structure - */ -typedef void (*get_ioengine_t)(struct ioengine_ops **); - -/* - * io engine entry points - */ -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_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 *); -extern int td_io_close_file(struct thread_data *, struct fio_file *); -extern int td_io_unlink_file(struct thread_data *, struct fio_file *); -extern int __must_check td_io_get_file_size(struct thread_data *, struct fio_file *); - -extern struct ioengine_ops *load_ioengine(struct thread_data *, const char *); -extern void register_ioengine(struct ioengine_ops *); -extern void unregister_ioengine(struct ioengine_ops *); -extern void free_ioengine(struct thread_data *); -extern void close_ioengine(struct thread_data *); - -extern int fio_show_ioengine_help(const char *engine); - -#endif diff --git a/ioengines.h b/ioengines.h new file mode 100644 index 00000000..f24f4df5 --- /dev/null +++ b/ioengines.h @@ -0,0 +1,90 @@ +#ifndef FIO_IOENGINE_H +#define FIO_IOENGINE_H + +#include "compiler/compiler.h" +#include "os/os.h" +#include "file.h" +#include "io_u.h" + +#define FIO_IOOPS_VERSION 23 + +/* + * io_ops->queue() return values + */ +enum { + FIO_Q_COMPLETED = 0, /* completed sync */ + FIO_Q_QUEUED = 1, /* queued, will complete async */ + FIO_Q_BUSY = 2, /* no more room, call ->commit() */ +}; + +struct ioengine_ops { + struct flist_head list; + const char *name; + int version; + int flags; + int (*setup)(struct thread_data *); + int (*init)(struct thread_data *); + int (*prep)(struct thread_data *, struct io_u *); + int (*queue)(struct thread_data *, struct io_u *); + 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 *); + int (*close_file)(struct thread_data *, struct fio_file *); + int (*invalidate)(struct thread_data *, struct fio_file *); + 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; +}; + +enum fio_ioengine_flags { + FIO_SYNCIO = 1 << 0, /* io engine has synchronous ->queue */ + FIO_RAWIO = 1 << 1, /* some sort of direct/raw io */ + FIO_DISKLESSIO = 1 << 2, /* no disk involved */ + FIO_NOEXTEND = 1 << 3, /* engine can't extend file */ + FIO_NODISKUTIL = 1 << 4, /* diskutil can't handle filename */ + FIO_UNIDIR = 1 << 5, /* engine is uni-directional */ + FIO_NOIO = 1 << 6, /* thread does only pseudo IO */ + 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) */ + FIO_FAKEIO = 1 << 11, /* engine pretends to do IO */ +}; + +/* + * External engine defined symbol to fill in the engine ops structure + */ +typedef void (*get_ioengine_t)(struct ioengine_ops **); + +/* + * io engine entry points + */ +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_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 *); +extern int td_io_close_file(struct thread_data *, struct fio_file *); +extern int td_io_unlink_file(struct thread_data *, struct fio_file *); +extern int __must_check td_io_get_file_size(struct thread_data *, struct fio_file *); + +extern struct ioengine_ops *load_ioengine(struct thread_data *, const char *); +extern void register_ioengine(struct ioengine_ops *); +extern void unregister_ioengine(struct ioengine_ops *); +extern void free_ioengine(struct thread_data *); +extern void close_ioengine(struct thread_data *); + +extern int fio_show_ioengine_help(const char *engine); + +#endif diff --git a/iolog.h b/iolog.h index 37f27bca..0733ad33 100644 --- a/iolog.h +++ b/iolog.h @@ -4,7 +4,7 @@ #include "lib/rbtree.h" #include "lib/ieee754.h" #include "flist.h" -#include "ioengine.h" +#include "ioengines.h" /* * Use for maintaining statistics diff --git a/rate-submit.c b/rate-submit.c index 4738dc4c..fdbece64 100644 --- a/rate-submit.c +++ b/rate-submit.c @@ -5,7 +5,7 @@ * */ #include "fio.h" -#include "ioengine.h" +#include "ioengines.h" #include "lib/getrusage.h" #include "rate-submit.h"