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 <david.chen@osnexus.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes zfsonlinux/zfs#3936
Closes #487
This commit is contained in:
Chunwei Chen 2015-10-23 17:17:57 -07:00 committed by Brian Behlendorf
parent 9b13f65d28
commit 3e7e6f34d0
1 changed files with 1 additions and 6 deletions

View File

@ -1634,16 +1634,11 @@ spl_kmem_cache_reap_now(spl_kmem_cache_t *skc, int count)
atomic_inc(&skc->skc_ref); atomic_inc(&skc->skc_ref);
/* /*
* Execute the registered reclaim callback if it exists. The * Execute the registered reclaim callback if it exists.
* per-cpu caches will be drained when is set KMC_EXPIRE_MEM.
*/ */
if (skc->skc_flags & KMC_SLAB) { if (skc->skc_flags & KMC_SLAB) {
if (skc->skc_reclaim) if (skc->skc_reclaim)
skc->skc_reclaim(skc->skc_private); skc->skc_reclaim(skc->skc_private);
if (spl_kmem_cache_expire & KMC_EXPIRE_MEM)
kmem_cache_shrink(skc->skc_linux_cache);
goto out; goto out;
} }