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> Reviewed-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
This commit is contained in:
Родитель
88603b6dc4
Коммит
cc2e9d2b26
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче