diff options
author | David Sterba <dsterba@suse.com> | 2017-01-24 13:15:41 +0100 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2017-01-25 09:48:15 +0100 |
commit | be5e0b230cc0a14823e3b7e005bdda40d19d20f2 (patch) | |
tree | 27aceed789411e708fd3d0449d8b3c0e581c53f2 | |
parent | 5826f1e9ff5d8e3df8d48a09f6b95a4ef4309950 (diff) |
btrfs-progs: kerncompat: add separate trace print for BUG_ON
We want to pass unmodified condition down to the handlers so we can't
use assert_trace for that purpose.
Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r-- | kerncompat.h | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/kerncompat.h b/kerncompat.h index b4070dac..94d815f2 100644 --- a/kerncompat.h +++ b/kerncompat.h @@ -106,6 +106,20 @@ static inline void warning_trace(const char *assertion, const char *filename, #endif } +static inline void bugon_trace(const char *assertion, const char *filename, + const char *func, unsigned line, long val) +{ + if (!val) + return; + fprintf(stderr, + "%s:%d: %s: BUG_ON `%s` triggered, value %ld\n", + filename, line, func, assertion, val); +#ifndef BTRFS_DISABLE_BACKTRACE + print_trace(); +#endif + abort(); + exit(1); +} #ifdef __CHECKER__ #define __force __attribute__((force)) @@ -292,12 +306,11 @@ static inline void assert_trace(const char *assertion, const char *filename, exit(1); } #define ASSERT(c) assert_trace(#c, __FILE__, __func__, __LINE__, (long)!(c)) -#define BUG_ON(c) assert_trace(#c, __FILE__, __func__, __LINE__, (long)(c)) #else #define ASSERT(c) assert(c) -#define BUG_ON(c) ASSERT(!(c)) #endif +#define BUG_ON(c) bugon_trace(#c, __FILE__, __func__, __LINE__, (long)(c)) #define BUG() BUG_ON(1) #define WARN_ON(c) warning_trace(#c, __FILE__, __func__, __LINE__, (long)(c)) |