summaryrefslogtreecommitdiffstats
path: root/sys/geom/geom.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/geom/geom.h')
-rw-r--r--sys/geom/geom.h30
1 files changed, 22 insertions, 8 deletions
diff --git a/sys/geom/geom.h b/sys/geom/geom.h
index 63db46a..31002fe 100644
--- a/sys/geom/geom.h
+++ b/sys/geom/geom.h
@@ -221,13 +221,29 @@ int g_handleattr_off_t(struct bio *bp, const char *attribute, off_t val);
struct g_consumer * g_new_consumer(struct g_geom *gp);
struct g_geom * g_new_geomf(struct g_class *mp, const char *fmt, ...);
struct g_provider * g_new_providerf(struct g_geom *gp, const char *fmt, ...);
-void g_sanity(void const *ptr);
void g_spoil(struct g_provider *pp, struct g_consumer *cp);
int g_std_access(struct g_provider *pp, int dr, int dw, int de);
void g_std_done(struct bio *bp);
void g_std_spoiled(struct g_consumer *cp);
void g_wither_geom(struct g_geom *gp, int error);
+#ifdef DIAGNOSTIC
+int g_valid_obj(void const *ptr);
+#define G_VALID_CLASS(foo) \
+ KASSERT(g_valid_obj(foo) == 1, ("%p is not a g_class", foo))
+#define G_VALID_GEOM(foo) \
+ KASSERT(g_valid_obj(foo) == 2, ("%p is not a g_geom", foo))
+#define G_VALID_CONSUMER(foo) \
+ KASSERT(g_valid_obj(foo) == 3, ("%p is not a g_consumer", foo))
+#define G_VALID_PROVIDER(foo) \
+ KASSERT(g_valid_obj(foo) == 4, ("%p is not a g_provider", foo))
+#else
+#define G_VALID_CLASS(foo) do { } while (0)
+#define G_VALID_GEOM(foo) do { } while (0)
+#define G_VALID_CONSUMER(foo) do { } while (0)
+#define G_VALID_PROVIDER(foo) do { } while (0)
+#endif
+
int g_modevent(module_t, int, void *);
/* geom_io.c */
@@ -258,16 +274,17 @@ g_malloc(int size, int flags)
void *p;
p = malloc(size, M_GEOM, flags);
- g_sanity(p);
- /* printf("malloc(%d, %x) -> %p\n", size, flags, p); */
return (p);
}
static __inline void
g_free(void *ptr)
{
- g_sanity(ptr);
- /* printf("free(%p)\n", ptr); */
+
+#ifdef DIAGNOSTIC
+ KASSERT(g_valid_obj(ptr) == 0,
+ ("g_free(%p) of live object, type %d", ptr, g_valid_obj(ptr)));
+#endif
free(ptr, M_GEOM);
}
@@ -281,19 +298,16 @@ extern struct sx topology_lock;
#define g_topology_unlock() \
do { \
- g_sanity(NULL); \
sx_xunlock(&topology_lock); \
} while (0)
#define g_topology_assert() \
do { \
- g_sanity(NULL); \
sx_assert(&topology_lock, SX_XLOCKED); \
} while (0)
#define g_topology_assert_not() \
do { \
- g_sanity(NULL); \
sx_assert(&topology_lock, SX_UNLOCKED); \
} while (0)
OpenPOWER on IntegriCloud