On Fri, Oct 16, 2020 at 12:44:58PM +0200, mwilck@xxxxxxxx wrote: > 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. > Reviewed-by: Benjamin Marzinski <bmarzins@xxxxxxxxxx> > 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