| #ifndef FIO_DEBUG_H |
| #define FIO_DEBUG_H |
| |
| #include "lib/types.h" |
| |
| enum { |
| FD_PROCESS = 0, |
| FD_FILE, |
| FD_IO, |
| FD_MEM, |
| FD_BLKTRACE, |
| FD_VERIFY, |
| FD_RANDOM, |
| FD_PARSE, |
| FD_DISKUTIL, |
| FD_JOB, |
| FD_MUTEX, |
| 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, *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 { |
| const char *name; |
| const char *help; |
| unsigned long shift; |
| unsigned int jobno; |
| }; |
| extern const struct debug_level debug_levels[]; |
| |
| extern unsigned long fio_debug; |
| |
| void __dprint(int type, const char *str, ...) __attribute__((format (printf, 2, 3))); |
| |
| #define dprint(type, str, args...) \ |
| do { \ |
| if (((1 << type) & fio_debug) == 0) \ |
| break; \ |
| __dprint((type), (str), ##args); \ |
| } while (0) \ |
| |
| #else |
| |
| static inline void dprint(int type, const char *str, ...) |
| { |
| } |
| #endif |
| |
| #endif |