zfs/patches/no-debug-userspace.patch

185 lines
5.6 KiB
Diff

Disable debug code on userspace
Index: zfs+chaos4/lib/libzfscommon/include/sys/arc.h
===================================================================
--- zfs+chaos4.orig/lib/libzfscommon/include/sys/arc.h
+++ zfs+chaos4/lib/libzfscommon/include/sys/arc.h
@@ -82,7 +82,7 @@ int arc_released(arc_buf_t *buf);
int arc_has_callback(arc_buf_t *buf);
void arc_buf_freeze(arc_buf_t *buf);
void arc_buf_thaw(arc_buf_t *buf);
-#ifdef ZFS_DEBUG
+#if defined(ZFS_DEBUG) || (!defined(_KERNEL) && !defined(NDEBUG))
int arc_referenced(arc_buf_t *buf);
#endif
Index: zfs+chaos4/lib/libzfscommon/include/sys/refcount.h
===================================================================
--- zfs+chaos4.orig/lib/libzfscommon/include/sys/refcount.h
+++ zfs+chaos4/lib/libzfscommon/include/sys/refcount.h
@@ -43,7 +43,7 @@ extern "C" {
*/
#define FTAG ((char *)__func__)
-#if defined(DEBUG) || !defined(_KERNEL)
+#if defined(DEBUG)
typedef struct reference {
list_node_t ref_link;
void *ref_holder;
Index: zfs+chaos4/lib/libzfscommon/include/sys/zfs_context_user.h
===================================================================
--- zfs+chaos4.orig/lib/libzfscommon/include/sys/zfs_context_user.h
+++ zfs+chaos4/lib/libzfscommon/include/sys/zfs_context_user.h
@@ -96,6 +96,8 @@ extern "C" {
#ifdef ZFS_DEBUG
extern void dprintf_setup(int *argc, char **argv);
+#else
+#define dprintf_setup(ac,av) ((void) 0)
#endif /* ZFS_DEBUG */
extern void cmn_err(int, const char *, ...);
@@ -105,21 +107,26 @@ extern void vpanic(const char *, __va_li
#define fm_panic panic
+#ifndef zp_verify
/* This definition is copied from assert.h. */
#if defined(__STDC__)
#if __STDC_VERSION__ - 0 >= 199901L
-#define verify(EX) (void)((EX) || \
+#define zp_verify(EX) (void)((EX) || \
(__assert_c99(#EX, __FILE__, __LINE__, __func__), 0))
#else
-#define verify(EX) (void)((EX) || (__assert(#EX, __FILE__, __LINE__), 0))
+#define zp_verify(EX) (void)((EX) || (__assert(#EX, __FILE__, __LINE__), 0))
#endif /* __STDC_VERSION__ - 0 >= 199901L */
#else
-#define verify(EX) (void)((EX) || (_assert("EX", __FILE__, __LINE__), 0))
+#define zp_verify(EX) (void)((EX) || (_assert("EX", __FILE__, __LINE__), 0))
#endif /* __STDC__ */
+#endif
-
-#define VERIFY verify
+#ifndef VERIFY
+#define VERIFY zp_verify
+#endif
+#ifndef ASSERT
#define ASSERT assert
+#endif
extern void __assert(const char *, const char *, int);
@@ -332,6 +339,7 @@ extern int taskq_member(taskq_t *, void
typedef struct vnode {
uint64_t v_size;
int v_fd;
+ mode_t v_mode;
char *v_path;
} vnode_t;
Index: zfs+chaos4/lib/libzfscommon/include/sys/zfs_debug.h
===================================================================
--- zfs+chaos4.orig/lib/libzfscommon/include/sys/zfs_debug.h
+++ zfs+chaos4/lib/libzfscommon/include/sys/zfs_debug.h
@@ -44,7 +44,7 @@ extern "C" {
* ZFS debugging
*/
-#if defined(DEBUG) || !defined(_KERNEL)
+#if defined(DEBUG)
#define ZFS_DEBUG
#endif
Index: zfs+chaos4/lib/libzpool/arc.c
===================================================================
--- zfs+chaos4.orig/lib/libzpool/arc.c
+++ zfs+chaos4/lib/libzpool/arc.c
@@ -1802,7 +1802,7 @@ arc_reclaim_needed(void)
return (1);
#endif
-#else
+#elif defined(ZFS_DEBUG)
if (spa_get_random(100) == 0)
return (1);
#endif
@@ -2881,7 +2881,7 @@ arc_has_callback(arc_buf_t *buf)
return (buf->b_efunc != NULL);
}
-#ifdef ZFS_DEBUG
+#if defined(ZFS_DEBUG) || (!defined(_KERNEL) && !defined(NDEBUG))
int
arc_referenced(arc_buf_t *buf)
{
Index: zfs+chaos4/lib/libzpool/kernel.c
===================================================================
--- zfs+chaos4.orig/lib/libzpool/kernel.c
+++ zfs+chaos4/lib/libzpool/kernel.c
@@ -384,6 +384,7 @@ vn_open(char *path, int x1, int flags, i
vp->v_fd = fd;
vp->v_size = st.st_size;
+ vp->v_mode = st.st_mode;
vp->v_path = spa_strdup(path);
return (0);
@@ -422,10 +423,17 @@ vn_rdwr(int uio, vnode_t *vp, void *addr
* To simulate partial disk writes, we split writes into two
* system calls so that the process can be killed in between.
*/
- split = (len > 0 ? rand() % len : 0);
- iolen = pwrite64(vp->v_fd, addr, split, offset);
- iolen += pwrite64(vp->v_fd, (char *)addr + split,
- len - split, offset + split);
+#ifdef ZFS_DEBUG
+ if (!S_ISBLK(vp->v_mode) && !S_ISCHR(vp->v_mode)) {
+ split = (len > 0 ? rand() % len : 0);
+ iolen = pwrite64(vp->v_fd, addr, split, offset);
+ iolen += pwrite64(vp->v_fd, (char *)addr + split,
+ len - split, offset + split);
+ } else
+ iolen = pwrite64(vp->v_fd, addr, len, offset);
+#else
+ iolen = pwrite64(vp->v_fd, addr, len, offset);
+#endif
}
if (iolen < 0)
Index: zfs+chaos4/lib/libzpool/refcount.c
===================================================================
--- zfs+chaos4.orig/lib/libzpool/refcount.c
+++ zfs+chaos4/lib/libzpool/refcount.c
@@ -28,7 +28,7 @@
#include <sys/zfs_context.h>
#include <sys/refcount.h>
-#if defined(DEBUG) || !defined(_KERNEL)
+#if defined(DEBUG)
#ifdef _KERNEL
int reference_tracking_enable = FALSE; /* runs out of memory too easily */
Index: zfs+chaos4/lib/libzpool/spa_misc.c
===================================================================
--- zfs+chaos4.orig/lib/libzpool/spa_misc.c
+++ zfs+chaos4/lib/libzpool/spa_misc.c
@@ -178,11 +178,15 @@ kmem_cache_t *spa_buffer_pool;
int spa_mode;
#ifdef ZFS_DEBUG
+#ifdef _KERNEL
/* Everything except dprintf is on by default in debug builds */
int zfs_flags = ~ZFS_DEBUG_DPRINTF;
#else
+int zfs_flags = ~0;
+#endif /* _KERNEL */
+#else
int zfs_flags = 0;
-#endif
+#endif /* ZFS_DEBUG */
/*
* zfs_recover can be set to nonzero to attempt to recover from