VERIFY_SHA256, /* sha256 sum data blocks */
VERIFY_SHA512, /* sha512 sum data blocks */
VERIFY_META, /* block_num, timestamp etc. */
- VERIFY_PATTERN, /* verify a specific pattern */
VERIFY_NULL, /* pretend to verify */
};
unsigned long total_run_time;
};
+struct bssplit {
+ unsigned int bs;
+ unsigned char perc;
+};
+
struct thread_options {
int pad;
char *description;
unsigned int iodepth_batch;
unsigned long long size;
+ unsigned int fill_device;
unsigned long long file_size_low;
unsigned long long file_size_high;
unsigned long long start_offset;
unsigned int bs[2];
unsigned int min_bs[2];
unsigned int max_bs[2];
+ struct bssplit *bssplit;
+ unsigned int bssplit_nr;
unsigned int nr_files;
unsigned int open_files;
}
#define BLOCKS_PER_MAP (8 * sizeof(long))
-#define TO_MAP_BLOCK(td, f, b) ((b) - ((f)->file_offset / (td)->o.rw_min_bs))
+#define TO_MAP_BLOCK(td, f, b) ((b) - ((f)->file_offset / (unsigned long long) (td)->o.rw_min_bs))
#define RAND_MAP_IDX(td, f, b) (TO_MAP_BLOCK(td, f, b) / BLOCKS_PER_MAP)
#define RAND_MAP_BIT(td, f, b) (TO_MAP_BLOCK(td, f, b) & (BLOCKS_PER_MAP - 1))
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_sync(struct thread_data *, struct fio_file *);
-extern int __must_check td_io_getevents(struct thread_data *, int, int, struct timespec *);
+extern int __must_check td_io_getevents(struct thread_data *, unsigned int, unsigned int, 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 void td_io_close_file(struct thread_data *, struct fio_file *);
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 *, int, int, struct timespec *);
+ int (*getevents)(struct thread_data *, unsigned int, unsigned int, struct timespec *);
struct io_u *(*event)(struct thread_data *, int);
int (*cancel)(struct thread_data *, struct io_u *);
void (*cleanup)(struct thread_data *);
void *dlhandle;
};
-#define FIO_IOOPS_VERSION 7
+#define FIO_IOOPS_VERSION 8
extern struct ioengine_ops *load_ioengine(struct thread_data *, const char *);
extern void register_ioengine(struct ioengine_ops *);
td->verror[0] = '\0';
}
+enum {
+ FD_PROCESS = 1 << 0,
+ FD_FILE = 1 << 1,
+ FD_IO = 1 << 2,
+ FD_MEM = 1 << 3,
+};
+
+extern unsigned long fio_debug;
+#define dprint(type, str, args...) \
+ do { \
+ if (((type) & fio_debug) == 0) \
+ break; \
+ log_info(str, ##args); \
+ } while (0)
+
+static inline void dprint_io_u(struct io_u *io_u, const char *p)
+{
+ struct fio_file *f = io_u->file;
+
+ dprint(FD_IO, "%s: io_u %p: off=%llu/len=%lu/ddir=%d", p, io_u,
+ io_u->offset, io_u->buflen, io_u->ddir);
+ if (f)
+ dprint(FD_IO, "/%s", f->file_name);
+ dprint(FD_IO, "\n");
+}
+
#endif