]> granicus.if.org Git - zfs/commitdiff
Do not call cond_resched() in spl_slab_reclaim()
authorRichard Yao <ryao@cs.stonybrook.edu>
Thu, 21 Mar 2013 17:21:11 +0000 (13:21 -0400)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 21 Mar 2013 19:58:44 +0000 (12:58 -0700)
Calling cond_resched() after each object is freed and then after each
slab is freed can cause slabs of objects to live for excessive periods
of time following reclaimation. This interferes with the kernel's own
memory management when called from kswapd and can cause direct reclaim
to occur in response to memory pressure that should have been resolved.

Signed-off-by: Richard Yao <ryao@cs.stonybrook.edu>
module/spl/spl-kmem.c

index f9c11149181120726cf03d693569e46bfeab6c9e..a0ca2d2be5d684aa4d21e9bc8b2265687981f5c6 100644 (file)
@@ -1112,14 +1112,11 @@ spl_slab_reclaim(spl_kmem_cache_t *skc, int count, int flag)
 
                if (skc->skc_flags & KMC_OFFSLAB)
                        kv_free(skc, sko->sko_addr, size);
-
-               cond_resched();
        }
 
        list_for_each_entry_safe(sks, m, &sks_list, sks_list) {
                ASSERT(sks->sks_magic == SKS_MAGIC);
                kv_free(skc, sks, skc->skc_slab_size);
-               cond_resched();
        }
 
        SEXIT;