]> Git Repo - linux.git/blob - drivers/md/dm-vdo/logger.h
Merge tag 'kbuild-v6.9' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy...
[linux.git] / drivers / md / dm-vdo / logger.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright 2023 Red Hat
4  */
5
6 #ifndef VDO_LOGGER_H
7 #define VDO_LOGGER_H
8
9 #include <linux/kern_levels.h>
10 #include <linux/module.h>
11 #include <linux/ratelimit.h>
12 #include <linux/device-mapper.h>
13
14 /* Custom logging utilities for UDS */
15
16 enum {
17         VDO_LOG_EMERG = LOGLEVEL_EMERG,
18         VDO_LOG_ALERT = LOGLEVEL_ALERT,
19         VDO_LOG_CRIT = LOGLEVEL_CRIT,
20         VDO_LOG_ERR = LOGLEVEL_ERR,
21         VDO_LOG_WARNING = LOGLEVEL_WARNING,
22         VDO_LOG_NOTICE = LOGLEVEL_NOTICE,
23         VDO_LOG_INFO = LOGLEVEL_INFO,
24         VDO_LOG_DEBUG = LOGLEVEL_DEBUG,
25
26         VDO_LOG_MAX = VDO_LOG_DEBUG,
27         VDO_LOG_DEFAULT = VDO_LOG_INFO,
28 };
29
30 extern int vdo_log_level;
31
32 #define DM_MSG_PREFIX "vdo"
33 #define VDO_LOGGING_MODULE_NAME DM_NAME ": " DM_MSG_PREFIX
34
35 /* Apply a rate limiter to a log method call. */
36 #define vdo_log_ratelimit(log_fn, ...)                                    \
37         do {                                                              \
38                 static DEFINE_RATELIMIT_STATE(_rs,                        \
39                                               DEFAULT_RATELIMIT_INTERVAL, \
40                                               DEFAULT_RATELIMIT_BURST);   \
41                 if (__ratelimit(&_rs)) {                                  \
42                         log_fn(__VA_ARGS__);                              \
43                 }                                                         \
44         } while (0)
45
46 int vdo_get_log_level(void);
47
48 void vdo_log_embedded_message(int priority, const char *module, const char *prefix,
49                               const char *fmt1, va_list args1, const char *fmt2, ...)
50         __printf(4, 0) __printf(6, 7);
51
52 void vdo_log_backtrace(int priority);
53
54 /* All log functions will preserve the caller's value of errno. */
55
56 #define vdo_log_strerror(priority, errnum, ...) \
57         __vdo_log_strerror(priority, errnum, VDO_LOGGING_MODULE_NAME, __VA_ARGS__)
58
59 int __vdo_log_strerror(int priority, int errnum, const char *module,
60                        const char *format, ...)
61         __printf(4, 5);
62
63 int vdo_vlog_strerror(int priority, int errnum, const char *module, const char *format,
64                       va_list args)
65         __printf(4, 0);
66
67 /* Log an error prefixed with the string associated with the errnum. */
68 #define vdo_log_error_strerror(errnum, ...) \
69         vdo_log_strerror(VDO_LOG_ERR, errnum, __VA_ARGS__)
70
71 #define vdo_log_debug_strerror(errnum, ...) \
72         vdo_log_strerror(VDO_LOG_DEBUG, errnum, __VA_ARGS__)
73
74 #define vdo_log_info_strerror(errnum, ...) \
75         vdo_log_strerror(VDO_LOG_INFO, errnum, __VA_ARGS__)
76
77 #define vdo_log_warning_strerror(errnum, ...) \
78         vdo_log_strerror(VDO_LOG_WARNING, errnum, __VA_ARGS__)
79
80 #define vdo_log_fatal_strerror(errnum, ...) \
81         vdo_log_strerror(VDO_LOG_CRIT, errnum, __VA_ARGS__)
82
83 #define vdo_log_message(priority, ...) \
84         __vdo_log_message(priority, VDO_LOGGING_MODULE_NAME, __VA_ARGS__)
85
86 void __vdo_log_message(int priority, const char *module, const char *format, ...)
87         __printf(3, 4);
88
89 #define vdo_log_debug(...) vdo_log_message(VDO_LOG_DEBUG, __VA_ARGS__)
90
91 #define vdo_log_info(...) vdo_log_message(VDO_LOG_INFO, __VA_ARGS__)
92
93 #define vdo_log_warning(...) vdo_log_message(VDO_LOG_WARNING, __VA_ARGS__)
94
95 #define vdo_log_error(...) vdo_log_message(VDO_LOG_ERR, __VA_ARGS__)
96
97 #define vdo_log_fatal(...) vdo_log_message(VDO_LOG_CRIT, __VA_ARGS__)
98
99 void vdo_pause_for_logger(void);
100 #endif /* VDO_LOGGER_H */
This page took 0.037163 seconds and 4 git commands to generate.