#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
+#include <string.h>
#include "list.h"
#include "md5.h"
#define td_verror(td, err) __td_verror((td), (err), strerror((err)))
#define td_vmsg(td, err, msg) __td_verror((td), (err), (msg))
-extern int rate_quit;
extern int exitall_on_terminate;
extern int thread_number;
extern int shm_id;
extern int terse_output;
extern FILE *f_out;
extern FILE *f_err;
-extern char *fio_inst_prefix;
+extern const char *fio_inst_prefix;
extern int temp_stall_ts;
extern struct thread_data *threads;
extern void __usec_sleep(unsigned int);
extern void usec_sleep(struct thread_data *, unsigned long);
extern void rate_throttle(struct thread_data *, unsigned long, unsigned int, int);
+extern void fill_start_time(struct timeval *);
/*
* Init functions
} while (0)
struct ioengine_ops {
+ struct list_head list;
char name[16];
int version;
int flags;
#define FIO_IOOPS_VERSION 3
extern struct ioengine_ops *load_ioengine(struct thread_data *, const char *);
+extern int register_ioengine(struct ioengine_ops *);
+extern void unregister_ioengine(struct ioengine_ops *);
extern void close_ioengine(struct thread_data *);
/*
* Mark unused variables passed to ops functions as unused, to silence gcc
*/
#define fio_unused __attribute((__unused__))
+#define fio_init __attribute__((constructor))
+#define fio_exit __attribute__((destructor))
#define for_each_td(td, i) \
for ((i) = 0, (td) = &threads[0]; (i) < (int) thread_number; (i)++, (td)++)