[PATCH 24/24] nilfs2: introduce option of using dynamic debugging

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Vyacheslav Dubeyko <slava@xxxxxxxxxxx>
Subject: [PATCH 24/24] nilfs2: introduce option of using dynamic debugging

This patch implements opportunity of dynamic debugging in NILFS2 driver.
It introduces CONFIG_NILFS2_USE_PR_DEBUG kernel configuration
option. Enabling of this option results in using of pr_debug()
instead of printk() and print_hex_dump_bytes() instead of
print_hex_dump(). If CONFIG_NILFS2_USE_PR_DEBUG is not set then
debugging messages are selected for printing in system log by means of
comparing of requested flags and DBG_MASK's flags set. Otherwise, the
behaviour of of pr_debug()/print_hex_dump_bytes()s are controlled via
writing to a control file in the 'debugfs' filesystem.

If CONFIG_NILFS2_USE_PR_DEBUG option is not set then it is used
printk()/print_hex_dump() for printing debugging messages in
system log.

Signed-off-by: Vyacheslav Dubeyko <slava@xxxxxxxxxxx>
CC: Ryusuke Konishi <konishi.ryusuke@xxxxxxxxxxxxx>
---
 fs/nilfs2/Kconfig |   22 ++++++++++++++++++++++
 fs/nilfs2/debug.h |   33 +++++++++++++++++++++++++++++++++
 2 files changed, 55 insertions(+)

diff --git a/fs/nilfs2/Kconfig b/fs/nilfs2/Kconfig
index 451a3a2..502419a 100644
--- a/fs/nilfs2/Kconfig
+++ b/fs/nilfs2/Kconfig
@@ -36,6 +36,24 @@ config NILFS2_DEBUG
 
 if NILFS2_DEBUG
 
+config NILFS2_USE_PR_DEBUG
+	bool "Use pr_debug() instead of printk()"
+	default n
+	select DYNAMIC_DEBUG
+	help
+	  This option enables using of pr_debug() instead of printk()
+	  and print_hex_dump_bytes() instead of print_hex_dump().
+
+	  If CONFIG_NILFS2_USE_PR_DEBUG is not set then debugging messages are
+	  selected for printing in system log by means of comparing of
+	  requested flags and DBG_MASK's flags set. Otherwise, the behaviour
+	  of of pr_debug()/print_hex_dump_bytes()s are controlled via writing
+	  to a control file in the 'debugfs' filesystem.
+
+	  If CONFIG_NILFS2_USE_PR_DEBUG option is not set then it is used
+	  printk()/print_hex_dump() for printing debugging messages in
+	  system log.
+
 config NILFS2_DEBUG_SHOW_ERRORS
 	bool "Show internal errors"
 	default n
@@ -60,6 +78,8 @@ config NILFS2_DEBUG_DUMP_STACK
 	  printed out for all called functions in the case of dynamic
 	  debug (CONFIG_NILFS2_USE_PR_DEBUG).
 
+if !NILFS2_USE_PR_DEBUG || (NILFS2_USE_PR_DEBUG && !DYNAMIC_DEBUG)
+
 config NILFS2_DEBUG_SUBSYSTEMS
 	bool "Enable output from subsystems"
 	depends on NILFS2_DEBUG
@@ -142,6 +162,8 @@ config NILFS2_DEBUG_HEXDUMP
 
 endif # NILFS2_DEBUG_SUBSYSTEMS
 
+endif # !NILFS2_USE_PR_DEBUG || (NILFS2_USE_PR_DEBUG && !DYNAMIC_DEBUG)
+
 endif # NILFS2_DEBUG
 
 endif # NILFS2_FS
diff --git a/fs/nilfs2/debug.h b/fs/nilfs2/debug.h
index 821fc75..585477e 100644
--- a/fs/nilfs2/debug.h
+++ b/fs/nilfs2/debug.h
@@ -173,6 +173,37 @@ static u32 DBG_MASK = (
 #define NILFS2_SUBSYS_MASK	0x0FFFFFFF
 #define NILFS2_DBG_OUT_MASK	0xF0000000
 
+#if (defined(CONFIG_NILFS2_USE_PR_DEBUG) && defined(CONFIG_DYNAMIC_DEBUG))
+
+#define nilfs2_printk(f, a...) \
+	do { \
+		pr_debug("NILFS DEBUG (%s, %d): %s:\n", \
+			__FILE__, __LINE__, __func__); \
+		pr_debug(f, ## a); \
+	} while (0)
+
+#define nilfs2_debug(flg, f, a...) \
+	do { \
+		bool can_dump_stack = DBG_MASK & DBG_DUMP_STACK; \
+		bool should_dump_stack = flg & DBG_DUMP_STACK; \
+		nilfs2_printk(f, ## a); \
+		if (can_dump_stack && should_dump_stack) \
+			dump_stack(); \
+	} while (0)
+
+#define nilfs2_print_hexdump(prefix, ptr, size) \
+	do { \
+		pr_debug("NILFS HEXDUMP (%s, %d): %s:\n", \
+				__FILE__, __LINE__, __func__); \
+		print_hex_dump_bytes(prefix, \
+				DUMP_PREFIX_ADDRESS, ptr, size); \
+	} while (0)
+
+#define nilfs2_hexdump(flg, prefix, ptr, size) \
+		nilfs2_print_hexdump(prefix, ptr, size)
+
+#else /* CONFIG_NILFS2_USE_PR_DEBUG && CONFIG_DYNAMIC_DEBUG */
+
 #define nilfs2_printk(f, a...) \
 	do { \
 		printk(KERN_DEBUG "NILFS DEBUG (%s, %d): %s:\n", \
@@ -221,6 +252,8 @@ static u32 DBG_MASK = (
 		} \
 	} while (0)
 
+#endif /* CONFIG_NILFS2_USE_PR_DEBUG && CONFIG_DYNAMIC_DEBUG */
+
 static inline int nilfs2_error_dbg(unsigned int flg,
 				    const unsigned char *file,
 				    int line,
-- 
1.7.9.5



--
To unsubscribe from this list: send the line "unsubscribe linux-nilfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Filesystem Development]     [Linux BTRFS]     [Linux CIFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux