]> granicus.if.org Git - zfs/commitdiff
Illumos 5163 - arc should reap range_seg_cache
authorGeorge Wilson <george.wilson@delphix.com>
Wed, 24 Jun 2015 22:48:22 +0000 (15:48 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 25 Jun 2015 15:58:16 +0000 (08:58 -0700)
5163 arc should reap range_seg_cache
Reviewed by: Christopher Siden <christopher.siden@delphix.com>
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Richard Elling <richard.elling@gmail.com>
Reviewed by: Saso Kiselkov <skiselkov.ml@gmail.com>
Approved by: Dan McDonald <danmcd@omniti.com>

References:
  https://www.illumos.org/issues/5163
  https://github.com/illumos/illumos-gate/commit/83803b5

Porting Notes:

Added umem_cache_reap_now() wrapped to suppress unused variable
warning for user space build in arc_kmem_reap_now().

Ported-by: Brian Behlendorf <behlendorf1@llnl.gov>
include/sys/zfs_context.h
lib/libspl/include/umem.h
module/zfs/arc.c
module/zfs/range_tree.c

index 62f7611fa30635652a9968e9e850f7f9826ef595..acd370b234894fe7013dbec89a6d88903d9ed989 100644 (file)
@@ -408,7 +408,7 @@ extern void kstat_set_raw_ops(kstat_t *ksp,
 #define        kmem_cache_alloc(_c, _f) umem_cache_alloc(_c, _f)
 #define        kmem_cache_free(_c, _b) umem_cache_free(_c, _b)
 #define        kmem_debugging()        0
-#define        kmem_cache_reap_now(_c)         /* nothing */
+#define        kmem_cache_reap_now(_c) umem_cache_reap_now(_c);
 #define        kmem_cache_set_move(_c, _cb)    /* nothing */
 #define        POINTER_INVALIDATE(_pp)         /* nothing */
 #define        POINTER_IS_VALID(_p)    0
index b1c9cb7ff3180610be812c77799f12e7291bd23e..a89cb4950db2133c6c72d04613d73e7d6739eb2f 100644 (file)
@@ -191,6 +191,11 @@ umem_cache_free(umem_cache_t *cp, void *ptr)
        umem_free(ptr, cp->cache_bufsize);
 }
 
+static inline void
+umem_cache_reap_now(umem_cache_t *cp)
+{
+}
+
 #ifdef  __cplusplus
 }
 #endif
index 99fa698722e2d082fd4826d92b5e6061bde128a8..9bf5272037d74b5bc04b9975afc597435c5f042b 100644 (file)
@@ -3043,6 +3043,7 @@ arc_kmem_reap_now(arc_reclaim_strategy_t strat, uint64_t bytes)
        kmem_cache_t            *prev_data_cache = NULL;
        extern kmem_cache_t     *zio_buf_cache[];
        extern kmem_cache_t     *zio_data_buf_cache[];
+       extern kmem_cache_t     *range_seg_cache;
 
        if ((arc_meta_used >= arc_meta_limit) && zfs_arc_meta_prune) {
                /*
@@ -3073,6 +3074,7 @@ arc_kmem_reap_now(arc_reclaim_strategy_t strat, uint64_t bytes)
        kmem_cache_reap_now(buf_cache);
        kmem_cache_reap_now(hdr_full_cache);
        kmem_cache_reap_now(hdr_l2only_cache);
+       kmem_cache_reap_now(range_seg_cache);
 }
 
 /*
index 22175e06ab307f5177fa934ed5e3e586cb525ac1..6422fd1c1fa6ecf2a9283fefeabca772f6b0a76a 100644 (file)
@@ -33,7 +33,7 @@
 #include <sys/zio.h>
 #include <sys/range_tree.h>
 
-static kmem_cache_t *range_seg_cache;
+kmem_cache_t *range_seg_cache;
 
 void
 range_tree_init(void)