[dm-devel] [PATCH v2 26/29] libmultipath: simplify dlog()
Benjamin Marzinski
bmarzins at redhat.com
Mon Oct 19 21:07:26 UTC 2020
On Fri, Oct 16, 2020 at 12:44:58PM +0200, mwilck at suse.com wrote:
> From: Martin Wilck <mwilck at suse.com>
>
> 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 at redhat.com>
> Signed-off-by: Martin Wilck <mwilck at suse.com>
> ---
> 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
More information about the dm-devel
mailing list