From: David Rientjes Date: Wed, 28 Dec 2022 06:05:48 +0000 (-0800) Subject: mm, slab: periodically resched in drain_freelist() X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=cc2e9d2b26c86c1dd8687f6916e5f621bcacd6f7;p=linux.git mm, slab: periodically resched in drain_freelist() drain_freelist() can be called with a very large number of slabs to free, such as for kmem_cache_shrink(), or depending on various settings of the slab cache when doing periodic reaping. If there is a potentially long list of slabs to drain, periodically schedule to ensure we aren't saturating the cpu for too long. Signed-off-by: David Rientjes Reviewed-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> Signed-off-by: Vlastimil Babka --- diff --git a/mm/slab.c b/mm/slab.c index 7a269db050eed..29300fc1289a8 100644 --- a/mm/slab.c +++ b/mm/slab.c @@ -2211,6 +2211,8 @@ static int drain_freelist(struct kmem_cache *cache, raw_spin_unlock_irq(&n->list_lock); slab_destroy(cache, slab); nr_freed++; + + cond_resched(); } out: return nr_freed;