From: Martin Wilck <mwilck@xxxxxxxx> By checking the log level in condlog() directly, we can simplify dlog(). Also, it's now possible to limit the log level at compile time by setting MAX_VERBOSITY, enabling the compiler to optimize away log messages with higher loglevel. Signed-off-by: Martin Wilck <mwilck@xxxxxxxx> --- libmultipath/debug.c | 30 +++++++++++++----------------- libmultipath/debug.h | 19 +++++++++++++++---- libmultipath/devmapper.c | 4 +++- tests/test-log.c | 4 ++-- tests/test-log.h | 3 ++- 5 files changed, 35 insertions(+), 25 deletions(-) diff --git a/libmultipath/debug.c b/libmultipath/debug.c index f9b7755..429f269 100644 --- a/libmultipath/debug.c +++ b/libmultipath/debug.c @@ -18,29 +18,25 @@ int logsink; int libmp_verbosity = DEFAULT_VERBOSITY; -void dlog (int sink, int prio, const char * fmt, ...) +void dlog(int prio, const char * fmt, ...) { va_list ap; va_start(ap, fmt); + if (logsink != LOGSINK_SYSLOG) { + if (logsink == LOGSINK_STDERR_WITH_TIME) { + time_t t = time(NULL); + struct tm *tb = localtime(&t); + char buff[16]; - if (prio <= libmp_verbosity) { - if (sink != LOGSINK_SYSLOG) { - if (sink == LOGSINK_STDERR_WITH_TIME) { - time_t t = time(NULL); - struct tm *tb = localtime(&t); - char buff[16]; - - strftime(buff, sizeof(buff), - "%b %d %H:%M:%S", tb); - buff[sizeof(buff)-1] = '\0'; - - fprintf(stderr, "%s | ", buff); - } - vfprintf(stderr, fmt, ap); + strftime(buff, sizeof(buff), + "%b %d %H:%M:%S", tb); + buff[sizeof(buff)-1] = '\0'; + fprintf(stderr, "%s | ", buff); } - else - log_safe(prio + 3, fmt, ap); + vfprintf(stderr, fmt, ap); } + else + log_safe(prio + 3, fmt, ap); va_end(ap); } diff --git a/libmultipath/debug.h b/libmultipath/debug.h index 91ba02b..705a5d7 100644 --- a/libmultipath/debug.h +++ b/libmultipath/debug.h @@ -1,5 +1,7 @@ -void dlog (int sink, int prio, const char * fmt, ...) - __attribute__((format(printf, 3, 4))); +#ifndef _DEBUG_H +#define _DEBUG_H +void dlog (int prio, const char *fmt, ...) + __attribute__((format(printf, 2, 3))); #include <pthread.h> @@ -10,8 +12,9 @@ void dlog (int sink, int prio, const char * fmt, ...) extern int logsink; extern int libmp_verbosity; -#define condlog(prio, fmt, args...) \ - dlog(logsink, prio, fmt "\n", ##args) +#ifndef MAX_VERBOSITY +#define MAX_VERBOSITY 4 +#endif enum { LOGSINK_STDERR_WITH_TIME = 0, @@ -19,3 +22,11 @@ enum { LOGSINK_SYSLOG = 1, }; +#define condlog(prio, fmt, args...) \ + do { \ + int __p = (prio); \ + \ + if (__p <= MAX_VERBOSITY && __p <= libmp_verbosity) \ + dlog(__p, fmt "\n", ##args); \ + } while (0) +#endif /* _DEBUG_H */ diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c index 78112a9..cf2f27c 100644 --- a/libmultipath/devmapper.c +++ b/libmultipath/devmapper.c @@ -274,7 +274,9 @@ static int dm_tgt_prereq (unsigned int *ver) static void _init_versions(void) { - dlog(logsink, 3, VERSION_STRING); + /* Can't use condlog here because of how VERSION_STRING is defined */ + if (3 <= libmp_verbosity) + dlog(3, VERSION_STRING); init_dm_library_version(); init_dm_drv_version(); init_dm_mpath_version(); diff --git a/tests/test-log.c b/tests/test-log.c index 051491e..42ebad0 100644 --- a/tests/test-log.c +++ b/tests/test-log.c @@ -6,8 +6,8 @@ #include "log.h" #include "test-log.h" -__attribute__((format(printf, 3, 0))) -void __wrap_dlog (int sink, int prio, const char * fmt, ...) +__attribute__((format(printf, 2, 0))) +void __wrap_dlog (int prio, const char * fmt, ...) { char buff[MAX_MSG_SIZE]; va_list ap; diff --git a/tests/test-log.h b/tests/test-log.h index 2c878c6..6d22cd2 100644 --- a/tests/test-log.h +++ b/tests/test-log.h @@ -1,7 +1,8 @@ #ifndef _TEST_LOG_H #define _TEST_LOG_H -void __wrap_dlog (int sink, int prio, const char * fmt, ...); +__attribute__((format(printf, 2, 0))) +void __wrap_dlog (int prio, const char * fmt, ...); void expect_condlog(int prio, char *string); #endif -- 2.28.0 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel