btrfs-progs: kerncompat: make WARN_ON more verbose

Curretnly WARN_ON would crash but that's not it's purpose. Add helper
that prints the warning, optionally with trace.

Signed-off-by: David Sterba <dsterba@suse.com>
master
David Sterba 2016-10-04 18:55:09 +02:00
parent a08ca376f7
commit 26619538da
1 changed files with 20 additions and 2 deletions

View File

@ -94,6 +94,24 @@ static inline void assert_trace(const char *assertion, const char *filename,
exit(1);
}
static inline void warning_trace(const char *assertion, const char *filename,
const char *func, unsigned line, int val,
int trace)
{
if (val)
return;
if (assertion)
fprintf(stderr,
"%s:%d: %s: Warning: assertion `%s` failed, value %d\n",
filename, line, func, assertion, val);
else
fprintf(stderr,
"%s:%d: %s: Warning: assertion failed, value %d.\n",
filename, line, func, val);
if (trace)
print_trace();
}
#define BUG() assert_trace(NULL, __FILE__, __func__, __LINE__, 0)
#else
#define BUG() assert(0)
@ -270,12 +288,12 @@ static inline long IS_ERR(const void *ptr)
#ifndef BTRFS_DISABLE_BACKTRACE
#define BUG_ON(c) assert_trace(#c, __FILE__, __func__, __LINE__, !(c))
#define WARN_ON(c) warning_trace(#c, __FILE__, __func__, __LINE__, !(c), 1)
#else
#define BUG_ON(c) assert(!(c))
#define WARN_ON(c) warning_trace(#c, __FILE__, __func__, __LINE__, !(c), 0)
#endif
#define WARN_ON(c) BUG_ON(c)
#ifndef BTRFS_DISABLE_BACKTRACE
#define ASSERT(c) assert_trace(#c, __FILE__, __func__, __LINE__, (c))
#else