diff options
author | Chunwei Chen <[email protected]> | 2015-10-23 17:17:57 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2015-11-11 13:48:31 -0800 |
commit | 3e7e6f34d0b39b210de68fd69a0c08c6d21227a5 (patch) | |
tree | c97e563b68f99f1ed79c3a5a124f6fa2d574e096 /module/spl/spl-kmem-cache.c | |
parent | 9b13f65d284d3a6b455df3199ffc83fd18bbdded (diff) |
Don't call kmem_cache_shrink from shrinker
Linux slab will automatically free empty slab when number of partial slab is
over min_partial, so we don't need to explicitly shrink it. In fact, calling
kmem_cache_shrink from shrinker will cause heavy contention on
kmem_cache_node->list_lock, to the point that it might cause __slab_free to
livelock (see zfsonlinux/zfs#3936)
Signed-off-by: Chunwei Chen <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes zfsonlinux/zfs#3936
Closes #487
Diffstat (limited to 'module/spl/spl-kmem-cache.c')
-rw-r--r-- | module/spl/spl-kmem-cache.c | 7 |
1 files changed, 1 insertions, 6 deletions
diff --git a/module/spl/spl-kmem-cache.c b/module/spl/spl-kmem-cache.c index 5a8493fe4..2b4ac4afc 100644 --- a/module/spl/spl-kmem-cache.c +++ b/module/spl/spl-kmem-cache.c @@ -1634,16 +1634,11 @@ spl_kmem_cache_reap_now(spl_kmem_cache_t *skc, int count) atomic_inc(&skc->skc_ref); /* - * Execute the registered reclaim callback if it exists. The - * per-cpu caches will be drained when is set KMC_EXPIRE_MEM. + * Execute the registered reclaim callback if it exists. */ if (skc->skc_flags & KMC_SLAB) { if (skc->skc_reclaim) skc->skc_reclaim(skc->skc_private); - - if (spl_kmem_cache_expire & KMC_EXPIRE_MEM) - kmem_cache_shrink(skc->skc_linux_cache); - goto out; } |