Messages in this thread Patch in this message | | | Date | Tue, 27 Dec 2022 22:05:48 -0800 (PST) | From | David Rientjes <> | Subject | [patch] 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 <rientjes@google.com> --- mm/slab.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/mm/slab.c b/mm/slab.c --- 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;
| |