btrfs-progs: kerncompat: make WARN_ON more verbose
authorDavid Sterba <dsterba@suse.com>
Tue, 4 Oct 2016 16:55:09 +0000 (18:55 +0200)
committerDavid Sterba <dsterba@suse.com>
Wed, 5 Oct 2016 10:39:01 +0000 (12:39 +0200)
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>
kerncompat.h

index d2780dc..26d3cb7 100644 (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