
Untitled
By: a guest on Jan 28th, 2012 | syntax:
Diff | size: 1.91 KB | hits: 60 | expires: in 4 days
diff --git a/sys/cddl/compat/opensolaris/kern/opensolaris_kmem.c b/sys/cddl/compat/opensolaris/kern/opensolaris_kmem.c
index 1feabe7..861bf3e 100644
--- a/sys/cddl/compat/opensolaris/kern/opensolaris_kmem.c
+++ b/sys/cddl/compat/opensolaris/kern/opensolaris_kmem.c
@@ -93,7 +93,7 @@ zfs_kmem_alloc(size_t size, int kmflags)
}
void
-zfs_kmem_free(void *buf, size_t size __unused)
+zfs_kmem_free_flags(void *buf, size_t size __unused, int flags)
{
#ifdef KMEM_DEBUG
if (buf == NULL) {
@@ -112,7 +112,10 @@ zfs_kmem_free(void *buf, size_t size __unused)
LIST_REMOVE(i, next);
mtx_unlock(&kmem_items_mtx);
#endif
- free(buf, M_SOLARIS);
+ if (flags & KM_NODUMP)
+ free (buf, M_EXCLUDE);
+ else
+ free(buf, M_SOLARIS);
}
static uint64_t kmem_size_val;
diff --git a/sys/cddl/compat/opensolaris/sys/kmem.h b/sys/cddl/compat/opensolaris/sys/kmem.h
index 428badf..08c79e6 100644
--- a/sys/cddl/compat/opensolaris/sys/kmem.h
+++ b/sys/cddl/compat/opensolaris/sys/kmem.h
@@ -66,6 +66,7 @@ typedef struct kmem_cache {
void *zfs_kmem_alloc(size_t size, int kmflags);
void zfs_kmem_free(void *buf, size_t size);
+void zfs_kmem_free_flags(void *buf, size_t size, int kmflags);
uint64_t kmem_size(void);
uint64_t kmem_used(void);
kmem_cache_t *kmem_cache_create(char *name, size_t bufsize, size_t align,
@@ -81,7 +82,8 @@ void *calloc(size_t n, size_t s);
#define kmem_alloc(size, kmflags) zfs_kmem_alloc((size), (kmflags))
#define kmem_zalloc(size, kmflags) zfs_kmem_alloc((size), (kmflags) | M_ZERO)
-#define kmem_free(buf, size) zfs_kmem_free((buf), (size))
+#define kmem_free(buf, size) zfs_kmem_free_flags((buf), (size), 0)
+#define kmem_free_flags(buf, size, flags) zfs_kmem_free_flags((buf), (size), (flags))
#define kmem_cache_set_move(cac