aboutsummaryrefslogtreecommitdiffstats
path: root/module
diff options
context:
space:
mode:
authorTim Chase <[email protected]>2014-06-18 15:22:50 -0500
committerBrian Behlendorf <[email protected]>2014-07-01 15:14:43 -0700
commitf6a869614e5bdf9a3819a845f7a90d8c9ede0fc3 (patch)
tree654e11a1b882e9f8346f3398215e0285fb3c74b5 /module
parent31cb5383bff0fddc5058973e32a6f2c446d45e59 (diff)
Safer debugging and assertion macros.
Spl's debugging and assertion macros macro used the typical do/while(0) form for if/else friendliness, however, this limits their use in contexts where a do loop is not valid; such as within another multi-statement style macro. The following macros have been converted to not use do/while(0): PANIC, ASSERT, ASSERTF, VERIFY, VERIFY3_IMPL PANIC has been converted to a wrapper around the new spl_PANIC() function. The other macros have been converted to use the "&&" operator for the branch-predicition conditional and also to use spl_PANIC(). The __ASSERT() macro was not touched. It is only used by the debugging infrastructure and that code, including this macro, will be retired when the tracepoint patches are merged. Signed-off-by: Tim Chase <[email protected]> Signed-off-by: Brian Behlendorf <[email protected]> Closes #367
Diffstat (limited to 'module')
-rw-r--r--module/spl/spl-err.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/module/spl/spl-err.c b/module/spl/spl-err.c
index b6d15f019..2706f9bd1 100644
--- a/module/spl/spl-err.c
+++ b/module/spl/spl-err.c
@@ -39,6 +39,27 @@ static char ce_prefix[CE_IGNORE][10] = { "", "NOTICE: ", "WARNING: ", "" };
static char ce_suffix[CE_IGNORE][2] = { "", "\n", "\n", "" };
#endif
+int
+spl_PANIC(char *filename, const char *functionname,
+ int lineno, const char *fmt, ...) {
+ char msg[MAXMSGLEN];
+ va_list ap;
+
+ va_start(ap, fmt);
+ if (vsnprintf(msg, sizeof (msg), fmt, ap) == sizeof (msg))
+ msg[sizeof (msg) - 1] = '\0';
+ va_end(ap);
+#ifdef NDEBUG
+ printk(KERN_EMERG "%s", msg);
+#else
+ spl_debug_msg(NULL, 0, 0,
+ filename, functionname, lineno, "%s", msg);
+#endif
+ spl_debug_bug(filename, functionname, lineno, 0);
+ return 1;
+}
+EXPORT_SYMBOL(spl_PANIC);
+
void
vpanic(const char *fmt, va_list ap)
{