aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Zuchowski <[email protected]>2019-11-27 13:45:56 -0500
committerBrian Behlendorf <[email protected]>2019-11-27 10:45:56 -0800
commit7c1bf0cf27f5947b5094b42e7707f22b28c5f923 (patch)
treee6af25861fc8d4e5345d98237d5e1b918e88f746
parent9e17e6f2541c69a7a5e0ed814a7f5e71cbf8b90a (diff)
Implement -A (ignore ASSERTs) for zdb
The command line switch -A (ignore ASSERTs) has always been available in zdb but was never connected up to the correct global variable. There are times when you need zdb to ignore asserts and keep dumping out whatever information it can get despite the ASSERT(s) failing. It was always intended to be part of zdb but was incomplete. Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Paul Zuchowski <[email protected]> Closes #9610
-rw-r--r--lib/libspl/include/assert.h10
-rw-r--r--lib/libzpool/kernel.c1
2 files changed, 10 insertions, 1 deletions
diff --git a/lib/libspl/include/assert.h b/lib/libspl/include/assert.h
index f615fbdfe..b7b406850 100644
--- a/lib/libspl/include/assert.h
+++ b/lib/libspl/include/assert.h
@@ -33,11 +33,18 @@
#include <stdlib.h>
#include <stdarg.h>
+#ifndef _KERNEL
+int aok;
+#endif
+
static inline int
libspl_assert(const char *buf, const char *file, const char *func, int line)
{
fprintf(stderr, "%s\n", buf);
fprintf(stderr, "ASSERT at %s:%d:%s()", file, line, func);
+ if (aok) {
+ return (0);
+ }
abort();
}
@@ -52,6 +59,9 @@ libspl_assertf(const char *file, const char *func, int line, char *format, ...)
fprintf(stderr, "\n");
fprintf(stderr, "ASSERT at %s:%d:%s()", file, line, func);
va_end(args);
+ if (aok) {
+ return;
+ }
abort();
}
diff --git a/lib/libzpool/kernel.c b/lib/libzpool/kernel.c
index ef52ed3af..6123b5d6a 100644
--- a/lib/libzpool/kernel.c
+++ b/lib/libzpool/kernel.c
@@ -47,7 +47,6 @@
* Emulation of kernel services in userland.
*/
-int aok;
uint64_t physmem;
char hw_serial[HW_HOSTID_LEN];
struct utsname hw_utsname;