enum {
IO_U_F_FREE = 1 << 0,
IO_U_F_FLIGHT = 1 << 1,
IO_U_F_FREE_DEF = 1 << 2,
IO_U_F_IN_CUR_DEPTH = 1 << 3,
enum {
IO_U_F_FREE = 1 << 0,
IO_U_F_FLIGHT = 1 << 1,
IO_U_F_FREE_DEF = 1 << 2,
IO_U_F_IN_CUR_DEPTH = 1 << 3,
int (*open_file)(struct thread_data *, struct fio_file *);
int (*close_file)(struct thread_data *, struct fio_file *);
int (*get_file_size)(struct thread_data *, struct fio_file *);
int (*open_file)(struct thread_data *, struct fio_file *);
int (*close_file)(struct thread_data *, struct fio_file *);
int (*get_file_size)(struct thread_data *, struct fio_file *);
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_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_UNIDIR = 1 << 5, /* engine is uni-directional */
FIO_NOIO = 1 << 6, /* thread does only pseudo IO */
FIO_UNIDIR = 1 << 5, /* engine is uni-directional */
FIO_NOIO = 1 << 6, /* thread does only pseudo IO */
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 struct ioengine_ops *load_ioengine(struct thread_data *, const char *);
extern void register_ioengine(struct ioengine_ops *);
extern void unregister_ioengine(struct ioengine_ops *);
void io_u_mark_submit(struct thread_data *, unsigned int);
int do_io_u_sync(struct thread_data *, struct io_u *);
void io_u_mark_submit(struct thread_data *, unsigned int);
int do_io_u_sync(struct thread_data *, struct io_u *);