aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/sys/abd.h1
-rw-r--r--module/os/freebsd/zfs/abd_os.c6
-rw-r--r--module/os/linux/zfs/abd_os.c5
-rw-r--r--module/zfs/arc.c1
4 files changed, 13 insertions, 0 deletions
diff --git a/include/sys/abd.h b/include/sys/abd.h
index dad048af5..e9bd0e96f 100644
--- a/include/sys/abd.h
+++ b/include/sys/abd.h
@@ -59,6 +59,7 @@ abd_t *abd_get_offset(abd_t *, size_t);
abd_t *abd_get_offset_size(abd_t *, size_t, size_t);
abd_t *abd_get_zeros(size_t);
abd_t *abd_get_from_buf(void *, size_t);
+void abd_cache_reap_now(void);
/*
* Conversion to and from a normal buffer
diff --git a/module/os/freebsd/zfs/abd_os.c b/module/os/freebsd/zfs/abd_os.c
index 500174775..b4d43b96a 100644
--- a/module/os/freebsd/zfs/abd_os.c
+++ b/module/os/freebsd/zfs/abd_os.c
@@ -488,3 +488,9 @@ abd_iter_unmap(struct abd_iter *aiter)
aiter->iter_mapaddr = NULL;
aiter->iter_mapsize = 0;
}
+
+void
+abd_cache_reap_now(void)
+{
+ kmem_cache_reap_soon(abd_chunk_cache);
+}
diff --git a/module/os/linux/zfs/abd_os.c b/module/os/linux/zfs/abd_os.c
index d39f0c6d5..1754ce032 100644
--- a/module/os/linux/zfs/abd_os.c
+++ b/module/os/linux/zfs/abd_os.c
@@ -920,6 +920,11 @@ abd_iter_unmap(struct abd_iter *aiter)
aiter->iter_mapsize = 0;
}
+void
+abd_cache_reap_now(void)
+{
+}
+
#if defined(_KERNEL)
/*
* bio_nr_pages for ABD.
diff --git a/module/zfs/arc.c b/module/zfs/arc.c
index 5717405d6..874cc02e8 100644
--- a/module/zfs/arc.c
+++ b/module/zfs/arc.c
@@ -4678,6 +4678,7 @@ arc_kmem_reap_soon(void)
kmem_cache_reap_now(hdr_full_cache);
kmem_cache_reap_now(hdr_l2only_cache);
kmem_cache_reap_now(zfs_btree_leaf_cache);
+ abd_cache_reap_now();
if (zio_arena != NULL) {
/*