configure: attempt to link against tcmalloc by default if available
[fio.git] / debug.h
diff --git a/debug.h b/debug.h
index b55a1e4dc7d76d3c17e660288441ffb255960942..51b18de235444244369bdf5d446234f857b3007b 100644 (file)
--- a/debug.h
+++ b/debug.h
@@ -1,8 +1,7 @@
 #ifndef FIO_DEBUG_H
 #define FIO_DEBUG_H
 
-#include <assert.h>
-#include "log.h"
+#include "lib/types.h"
 
 enum {
        FD_PROCESS      = 0,
@@ -19,10 +18,33 @@ enum {
        FD_PROFILE,
        FD_TIME,
        FD_NET,
+       FD_RATE,
+       FD_COMPRESS,
+       FD_STEADYSTATE,
+       FD_HELPERTHREAD,
+       FD_ZBD,
        FD_DEBUG_MAX,
 };
 
-extern unsigned int fio_debug_jobno, *fio_debug_jobp;
+extern unsigned int fio_debug_jobno, *fio_debug_jobp, *fio_warned;
+
+static inline bool fio_did_warn(unsigned int mask)
+{
+       if (*fio_warned & mask)
+               return true;
+
+       *fio_warned |= mask;
+       return false;
+}
+
+enum {
+       FIO_WARN_ROOT_FLUSH     = 1,
+       FIO_WARN_VERIFY_BUF     = 2,
+       FIO_WARN_ZONED_BUG      = 4,
+       FIO_WARN_IOLOG_DROP     = 8,
+       FIO_WARN_FADVISE        = 16,
+       FIO_WARN_BTRACE_ZERO    = 32,
+};
 
 #ifdef FIO_INC_DEBUG
 struct debug_level {
@@ -31,15 +53,15 @@ struct debug_level {
        unsigned long shift;
        unsigned int jobno;
 };
-extern struct debug_level debug_levels[];
+extern const struct debug_level debug_levels[];
 
 extern unsigned long fio_debug;
 
-void __dprint(int type, const char *str, ...);
+void __dprint(int type, const char *str, ...) __attribute__((format (printf, 2, 3)));
 
 #define dprint(type, str, args...)                     \
        do {                                            \
-               if ((((1 << type)) & fio_debug) == 0)   \
+               if (((1 << type) & fio_debug) == 0)     \
                        break;                          \
                __dprint((type), (str), ##args);        \
        } while (0)                                     \