From 5ec3bc5401f354444bdc0ce3c240df664f50d520 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Mon, 12 Feb 2018 10:11:31 -0700 Subject: [PATCH] init: add global 'warned' state In various places we spew a warning if some static variable isn't set, but this still means it can happen once per job. Add some global state to allow to track this globally instead. Signed-off-by: Jens Axboe --- debug.h | 13 ++++++++++++- init.c | 6 +++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/debug.h b/debug.h index e3aa3f18..68a5adca 100644 --- a/debug.h +++ b/debug.h @@ -2,6 +2,7 @@ #define FIO_DEBUG_H #include +#include "lib/types.h" #include "log.h" enum { @@ -26,7 +27,17 @@ enum { 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)) { + *fio_warned |= mask; + return true; + } + + return false; +} #ifdef FIO_INC_DEBUG struct debug_level { diff --git a/init.c b/init.c index 25661bef..28061db8 100644 --- a/init.c +++ b/init.c @@ -79,6 +79,7 @@ static int prev_group_jobs; unsigned long fio_debug = 0; unsigned int fio_debug_jobno = -1; unsigned int *fio_debug_jobp = NULL; +unsigned int *fio_warned = NULL; static char cmd_optstr[256]; static bool did_arg; @@ -309,6 +310,7 @@ static void free_shm(void) if (threads) { flow_exit(); fio_debug_jobp = NULL; + fio_warned = NULL; free_threads_shm(); } @@ -341,7 +343,7 @@ static int setup_thread_area(void) do { size_t size = max_jobs * sizeof(struct thread_data); - size += sizeof(unsigned int); + size += 2 * sizeof(unsigned int); #ifndef CONFIG_NO_SHM shm_id = shmget(0, size, IPC_CREAT | 0600); @@ -376,6 +378,8 @@ static int setup_thread_area(void) memset(threads, 0, max_jobs * sizeof(struct thread_data)); fio_debug_jobp = (unsigned int *)(threads + max_jobs); *fio_debug_jobp = -1; + fio_warned = fio_debug_jobp + 1; + *fio_warned = 0; flow_init(); -- 2.25.1