More random fixes
[fio.git] / fio.h
diff --git a/fio.h b/fio.h
index b7b25b21f37c8b81dc6e152d15955a74297f7980..7551ef608cee23020108a5dedf508f65a440bf76 100644 (file)
--- a/fio.h
+++ b/fio.h
@@ -184,7 +184,6 @@ enum {
        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 */
 };
 
@@ -264,6 +263,7 @@ enum fio_ioengine_flags {
        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_SIGQUIT     = 1 << 7,       /* needs SIGQUIT to exit */
 };
 
 enum fio_file_flags {
@@ -393,6 +393,7 @@ struct thread_options {
        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;
@@ -667,6 +668,7 @@ extern unsigned long long mlock_size;
 extern unsigned long page_mask, page_size;
 extern int read_only;
 extern int eta_print;
+extern char *job_section;
 
 extern struct thread_data *threads;
 
@@ -681,7 +683,7 @@ static inline void fio_ro_check(struct thread_data *td, struct io_u *io_u)
 }
 
 #define BLOCKS_PER_MAP         (8 * sizeof(long))
-#define TO_MAP_BLOCK(td, f, b) ((b) - ((f)->file_offset / (unsigned long long) (td)->o.rw_min_bs))
+#define TO_MAP_BLOCK(td, f, b) (b)
 #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))
 
@@ -972,4 +974,51 @@ static inline void clear_error(struct thread_data *td)
        td->verror[0] = '\0';
 }
 
+enum {
+       FD_PROCESS      = 0,
+       FD_FILE,
+       FD_IO,
+       FD_MEM,
+       FD_BLKTRACE,
+       FD_VERIFY,
+       FD_RANDOM,
+       FD_DEBUG_MAX,
+};
+
+#ifdef FIO_INC_DEBUG
+struct debug_level {
+       const char *name;
+       unsigned long shift;
+};
+extern struct debug_level debug_levels[];
+
+extern unsigned long fio_debug;
+
+#define dprint(type, str, args...)                             \
+       do {                                                    \
+               assert(type < FD_DEBUG_MAX);                    \
+               if ((((1 << type)) & fio_debug) == 0)           \
+                       break;                                  \
+               log_info("%-8s ", debug_levels[(type)].name);   \
+               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 (fio_debug & (1 << FD_IO)) {
+               if (f)
+                       log_info("/%s", f->file_name);
+
+               log_info("\n");
+       }
+}
+#else
+#define dprint(type, str, args...)
+#define dprint_io_u(io_u, p)
+#endif
+
 #endif