mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-24 19:28:53 +03:00
Retire legacy debugging infrastructure
When the SPL was originally written Linux tracepoints were still in their infancy. Therefore, an entire debugging subsystem was added to facilite tracing which served us well for many years. Now that Linux tracepoints have matured they provide all the functionality of the previous tracing subsystem. Rather than maintain parallel functionality it makes sense to fully adopt tracepoints. Therefore, this patch retires the legacy debugging infrastructure. See zfsonlinux/zfs@bc9f413 for the tracepoint changes. Signed-off-by: Ned Bass <bass6@llnl.gov> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #408
This commit is contained in:
+56
-98
@@ -30,7 +30,6 @@
|
||||
*
|
||||
* PANIC() - Panic the node and print message.
|
||||
* ASSERT() - Assert X is true, if not panic.
|
||||
* ASSERTF() - Assert X is true, if not panic and print message.
|
||||
* ASSERTV() - Wraps a variable declaration which is only used by ASSERT().
|
||||
* ASSERT3S() - Assert signed X OP Y is true, if not panic.
|
||||
* ASSERT3U() - Assert unsigned X OP Y is true, if not panic.
|
||||
@@ -44,110 +43,69 @@
|
||||
*/
|
||||
|
||||
#ifndef _SPL_DEBUG_H
|
||||
#define _SPL_DEBUG_H
|
||||
|
||||
#include <spl-debug.h>
|
||||
|
||||
#ifdef NDEBUG /* Debugging Disabled */
|
||||
|
||||
/* Define SPL_DEBUG_STR to make clear which ASSERT definitions are used */
|
||||
#define SPL_DEBUG_STR ""
|
||||
|
||||
#define PANIC(fmt, a...) \
|
||||
spl_PANIC(__FILE__, __FUNCTION__, __LINE__, fmt, ## a)
|
||||
|
||||
#define __ASSERT(x) ((void)0)
|
||||
#define ASSERT(x) ((void)0)
|
||||
#define ASSERTF(x, y, z...) ((void)0)
|
||||
#define ASSERTV(x)
|
||||
#define VERIFY(cond) \
|
||||
(void)(unlikely(!(cond)) && \
|
||||
spl_PANIC(__FILE__, __FUNCTION__, __LINE__, \
|
||||
"%s", "VERIFY(" #cond ") failed\n"))
|
||||
|
||||
#define VERIFY3_IMPL(LEFT, OP, RIGHT, TYPE, FMT, CAST) \
|
||||
(void)((!((TYPE)(LEFT) OP (TYPE)(RIGHT))) && \
|
||||
spl_PANIC(__FILE__, __FUNCTION__, __LINE__, \
|
||||
"VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
|
||||
"failed (" FMT " " #OP " " FMT ")\n", \
|
||||
CAST (LEFT), CAST (RIGHT)))
|
||||
|
||||
#define VERIFY3S(x,y,z) VERIFY3_IMPL(x, y, z, int64_t, "%lld", (long long))
|
||||
#define VERIFY3U(x,y,z) VERIFY3_IMPL(x, y, z, uint64_t, "%llu", \
|
||||
(unsigned long long))
|
||||
#define VERIFY3P(x,y,z) VERIFY3_IMPL(x, y, z, uintptr_t, "%p", (void *))
|
||||
#define VERIFY0(x) VERIFY3_IMPL(0, ==, x, int64_t, "%lld", (long long))
|
||||
|
||||
#define ASSERT3S(x,y,z) ((void)0)
|
||||
#define ASSERT3U(x,y,z) ((void)0)
|
||||
#define ASSERT3P(x,y,z) ((void)0)
|
||||
#define ASSERT0(x) ((void)0)
|
||||
|
||||
#else /* Debugging Enabled */
|
||||
|
||||
/* Define SPL_DEBUG_STR to make clear which ASSERT definitions are used */
|
||||
#define SPL_DEBUG_STR " (DEBUG mode)"
|
||||
|
||||
#define PANIC(fmt, a...) \
|
||||
spl_PANIC(__FILE__, __FUNCTION__, __LINE__, fmt, ## a)
|
||||
|
||||
/* ASSERTION that is safe to use within the debug system */
|
||||
#define __ASSERT(cond) \
|
||||
do { \
|
||||
if (unlikely(!(cond))) { \
|
||||
printk(KERN_EMERG "ASSERTION(" #cond ") failed\n"); \
|
||||
BUG(); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/* ASSERTION that will debug log used outside the debug sysytem */
|
||||
#define ASSERT(cond) \
|
||||
(void)(unlikely(!(cond)) && \
|
||||
spl_PANIC(__FILE__, __FUNCTION__, __LINE__, \
|
||||
"%s", "ASSERTION(" #cond ") failed\n"))
|
||||
|
||||
#define ASSERTF(cond, fmt, a...) \
|
||||
(void)(unlikely(!(cond)) && \
|
||||
spl_PANIC(__FILE__, __FUNCTION__, __LINE__, \
|
||||
"ASSERTION(" #cond ") failed: " fmt, ## a))
|
||||
|
||||
#define VERIFY3_IMPL(LEFT, OP, RIGHT, TYPE, FMT, CAST) \
|
||||
(void)((!((TYPE)(LEFT) OP (TYPE)(RIGHT))) && \
|
||||
spl_PANIC(__FILE__, __FUNCTION__, __LINE__, \
|
||||
"VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
|
||||
"failed (" FMT " " #OP " " FMT ")\n", \
|
||||
CAST (LEFT), CAST (RIGHT)))
|
||||
|
||||
#define VERIFY3S(x,y,z) VERIFY3_IMPL(x, y, z, int64_t, "%lld", (long long))
|
||||
#define VERIFY3U(x,y,z) VERIFY3_IMPL(x, y, z, uint64_t, "%llu", \
|
||||
(unsigned long long))
|
||||
#define VERIFY3P(x,y,z) VERIFY3_IMPL(x, y, z, uintptr_t, "%p", (void *))
|
||||
#define VERIFY0(x) VERIFY3_IMPL(0, ==, x, int64_t, "%lld", (long long))
|
||||
|
||||
#define ASSERT3S(x,y,z) VERIFY3S(x, y, z)
|
||||
#define ASSERT3U(x,y,z) VERIFY3U(x, y, z)
|
||||
#define ASSERT3P(x,y,z) VERIFY3P(x, y, z)
|
||||
#define ASSERT0(x) VERIFY0(x)
|
||||
|
||||
#define ASSERTV(x) x
|
||||
#define VERIFY(x) ASSERT(x)
|
||||
|
||||
#endif /* NDEBUG */
|
||||
#define _SPL_DEBUG_H
|
||||
|
||||
/*
|
||||
* Helpers for the Solaris debug macros above
|
||||
* Common DEBUG functionality.
|
||||
*/
|
||||
extern int spl_PANIC(char *filename, const char *functionname,
|
||||
int lineno, const char *fmt, ...);
|
||||
int spl_panic(const char *file, const char *func, int line,
|
||||
const char *fmt, ...);
|
||||
void spl_dumpstack(void);
|
||||
|
||||
#define PANIC(fmt, a...) \
|
||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, fmt, ## a)
|
||||
|
||||
#define VERIFY(cond) \
|
||||
(void)(unlikely(!(cond)) && \
|
||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||
"%s", "VERIFY(" #cond ") failed\n"))
|
||||
|
||||
#define VERIFY3_IMPL(LEFT, OP, RIGHT, TYPE, FMT, CAST) \
|
||||
(void)((!((TYPE)(LEFT) OP (TYPE)(RIGHT))) && \
|
||||
spl_panic(__FILE__, __FUNCTION__, __LINE__, \
|
||||
"VERIFY3(" #LEFT " " #OP " " #RIGHT ") " \
|
||||
"failed (" FMT " " #OP " " FMT ")\n", \
|
||||
CAST (LEFT), CAST (RIGHT)))
|
||||
|
||||
#define VERIFY3S(x,y,z) VERIFY3_IMPL(x, y, z, int64_t, "%lld", (long long))
|
||||
#define VERIFY3U(x,y,z) VERIFY3_IMPL(x, y, z, uint64_t, "%llu", \
|
||||
(unsigned long long))
|
||||
#define VERIFY3P(x,y,z) VERIFY3_IMPL(x, y, z, uintptr_t, "%p", (void *))
|
||||
#define VERIFY0(x) VERIFY3_IMPL(0, ==, x, int64_t, "%lld", (long long))
|
||||
|
||||
/*
|
||||
* Compile-time assertion. The condition 'x' must be constant.
|
||||
*/
|
||||
#define CTASSERT_GLOBAL(x) _CTASSERT(x, __LINE__)
|
||||
#define CTASSERT(x) { _CTASSERT(x, __LINE__); }
|
||||
#define _CTASSERT(x, y) __CTASSERT(x, y)
|
||||
#define __CTASSERT(x, y) \
|
||||
typedef char __attribute__ ((unused)) \
|
||||
#define __CTASSERT(x, y) \
|
||||
typedef char __attribute__ ((unused)) \
|
||||
__compile_time_assertion__ ## y[(x) ? 1 : -1]
|
||||
|
||||
/*
|
||||
* Debugging disabled (--disable-debug)
|
||||
*/
|
||||
#ifdef NDEBUG
|
||||
|
||||
#define SPL_DEBUG_STR ""
|
||||
#define ASSERT(x) ((void)0)
|
||||
#define ASSERTV(x)
|
||||
#define ASSERT3S(x,y,z) ((void)0)
|
||||
#define ASSERT3U(x,y,z) ((void)0)
|
||||
#define ASSERT3P(x,y,z) ((void)0)
|
||||
#define ASSERT0(x) ((void)0)
|
||||
|
||||
/*
|
||||
* Debugging enabled (--enable-debug)
|
||||
*/
|
||||
#else
|
||||
|
||||
#define SPL_DEBUG_STR " (DEBUG mode)"
|
||||
#define ASSERT(cond) VERIFY(cond)
|
||||
#define ASSERTV(x) x
|
||||
#define ASSERT3S(x,y,z) VERIFY3S(x, y, z)
|
||||
#define ASSERT3U(x,y,z) VERIFY3U(x, y, z)
|
||||
#define ASSERT3P(x,y,z) VERIFY3P(x, y, z)
|
||||
#define ASSERT0(x) VERIFY0(x)
|
||||
|
||||
#endif /* NDEBUG */
|
||||
|
||||
#endif /* SPL_DEBUG_H */
|
||||
|
||||
+11
-11
@@ -74,27 +74,27 @@
|
||||
* ship a kernel with CONFIG_RT_MUTEX_TESTER disabled.
|
||||
*/
|
||||
#if !defined(CONFIG_RT_MUTEX_TESTER) && defined(PF_MUTEX_TESTER)
|
||||
# define PF_NOFS PF_MUTEX_TESTER
|
||||
#define PF_NOFS PF_MUTEX_TESTER
|
||||
|
||||
static inline void
|
||||
sanitize_flags(struct task_struct *p, gfp_t *flags)
|
||||
{
|
||||
if (unlikely((p->flags & PF_NOFS) && (*flags & (__GFP_IO|__GFP_FS)))) {
|
||||
# ifdef NDEBUG
|
||||
SDEBUG_LIMIT(SD_CONSOLE | SD_WARNING, "Fixing allocation for "
|
||||
"task %s (%d) which used GFP flags 0x%x with PF_NOFS set\n",
|
||||
p->comm, p->pid, flags);
|
||||
spl_debug_dumpstack(p);
|
||||
#ifdef NDEBUG
|
||||
printk(KERN_WARNING "Fixing allocation for task %s (%d) "
|
||||
"which used GFP flags 0x%x with PF_NOFS set\n",
|
||||
p->comm, p->pid, *flags);
|
||||
spl_dumpstack();
|
||||
*flags &= ~(__GFP_IO|__GFP_FS);
|
||||
# else
|
||||
#else
|
||||
PANIC("FATAL allocation for task %s (%d) which used GFP "
|
||||
"flags 0x%x with PF_NOFS set\n", p->comm, p->pid, flags);
|
||||
# endif /* NDEBUG */
|
||||
"flags 0x%x with PF_NOFS set\n", p->comm, p->pid, *flags);
|
||||
#endif /* NDEBUG */
|
||||
}
|
||||
}
|
||||
#else
|
||||
# define PF_NOFS 0x00000000
|
||||
# define sanitize_flags(p, fl) ((void)0)
|
||||
#define PF_NOFS 0x00000000
|
||||
#define sanitize_flags(p, fl) ((void)0)
|
||||
#endif /* !defined(CONFIG_RT_MUTEX_TESTER) && defined(PF_MUTEX_TESTER) */
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user