dm vdo: add 'log_level' module parameter
authorMike Snitzer <snitzer@kernel.org>
Sat, 10 Feb 2024 16:42:00 +0000 (10:42 -0600)
committerMike Snitzer <snitzer@kernel.org>
Mon, 4 Mar 2024 20:07:56 +0000 (15:07 -0500)
Expose control over dm-vdo's log-level in terms of a module param. It
can be read and written via /sys/module/dm_vdo/parameters/log_level.

Signed-off-by: Mike Snitzer <snitzer@kernel.org>
Signed-off-by: Ken Raeburn <raeburn@redhat.com>
Signed-off-by: Matthew Sakai <msakai@redhat.com>
drivers/md/dm-vdo/dm-vdo-target.c
drivers/md/dm-vdo/logger.c
drivers/md/dm-vdo/logger.h

index c6ee8161ba62e192ae464505de68e4c5ddd503d6..288e9b79bf165d86ef4b1ceb9fe41e3e9cc41c32 100644 (file)
@@ -2905,6 +2905,9 @@ static void __exit vdo_exit(void)
 module_init(vdo_init);
 module_exit(vdo_exit);
 
+module_param_named(log_level, vdo_log_level, uint, 0644);
+MODULE_PARM_DESC(log_level, "Log level for log messages");
+
 MODULE_DESCRIPTION(DM_NAME " target for transparent deduplication");
 MODULE_AUTHOR("Red Hat, Inc.");
 MODULE_LICENSE("GPL");
index bac28fff622de7f83392d08fbb46f5ba62e9d135..5d27cd6483a9c0ed9b42b70378878d3529072ad4 100644 (file)
@@ -49,11 +49,17 @@ static const char *const PRIORITY_STRINGS[] = {
        "DEBUG",
 };
 
-static int log_level = UDS_LOG_INFO;
+int vdo_log_level = UDS_LOG_DEFAULT;
 
 int uds_get_log_level(void)
 {
-       return log_level;
+       int log_level_latch = READ_ONCE(vdo_log_level);
+
+       if (unlikely(log_level_latch > UDS_LOG_MAX)) {
+               log_level_latch = UDS_LOG_DEFAULT;
+               WRITE_ONCE(vdo_log_level, log_level_latch);
+       }
+       return log_level_latch;
 }
 
 int uds_log_string_to_priority(const char *string)
index ceb07aa3231fb3963c58b1ad1b37c484f8b587f7..095532afc9a385017a12bc7547c4673dab95791e 100644 (file)
@@ -6,20 +6,28 @@
 #ifndef UDS_LOGGER_H
 #define UDS_LOGGER_H
 
+#include <linux/kern_levels.h>
 #include <linux/module.h>
 #include <linux/ratelimit.h>
 #include <linux/device-mapper.h>
 
 /* Custom logging utilities for UDS */
 
-#define UDS_LOG_EMERG 0
-#define UDS_LOG_ALERT 1
-#define UDS_LOG_CRIT 2
-#define UDS_LOG_ERR 3
-#define UDS_LOG_WARNING 4
-#define UDS_LOG_NOTICE 5
-#define UDS_LOG_INFO 6
-#define UDS_LOG_DEBUG 7
+enum {
+       UDS_LOG_EMERG = LOGLEVEL_EMERG,
+       UDS_LOG_ALERT = LOGLEVEL_ALERT,
+       UDS_LOG_CRIT = LOGLEVEL_CRIT,
+       UDS_LOG_ERR = LOGLEVEL_ERR,
+       UDS_LOG_WARNING = LOGLEVEL_WARNING,
+       UDS_LOG_NOTICE = LOGLEVEL_NOTICE,
+       UDS_LOG_INFO = LOGLEVEL_INFO,
+       UDS_LOG_DEBUG = LOGLEVEL_DEBUG,
+
+       UDS_LOG_MAX = UDS_LOG_DEBUG,
+       UDS_LOG_DEFAULT = UDS_LOG_INFO,
+};
+
+extern int vdo_log_level;
 
 #define DM_MSG_PREFIX "vdo"
 #define UDS_LOGGING_MODULE_NAME DM_NAME ": " DM_MSG_PREFIX