diff --git a/module/spl/spl-err.c b/module/spl/spl-err.c index cf9f096b1..2f66b6e23 100644 --- a/module/spl/spl-err.c +++ b/module/spl/spl-err.c @@ -28,6 +28,17 @@ #include #include +/* + * It is often useful to actually have the panic crash the node so you + * can then get notified of the event, get the crashdump for later + * analysis and other such goodies. + * But we would still default to the current default of not to do that. + */ +unsigned int spl_panic_halt; +module_param(spl_panic_halt, uint, 0644); +MODULE_PARM_DESC(spl_panic_halt, + "Cause kernel panic on assertion failures"); + /* * Limit the number of stack traces dumped to not more than 5 every * 60 seconds to prevent denial-of-service attacks from debug code. @@ -62,6 +73,9 @@ spl_panic(const char *file, const char *func, int line, const char *fmt, ...) { printk(KERN_EMERG "%s", msg); printk(KERN_EMERG "PANIC at %s:%d:%s()\n", newfile, line, func); + if (spl_panic_halt) + panic("%s", msg); + spl_dumpstack(); /* Halt the thread to facilitate further debugging */