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);
|
raw_spin_unlock_irq(&n->list_lock);
|
||||||
slab_destroy(cache, slab);
|
slab_destroy(cache, slab);
|
||||||
nr_freed++;
|
nr_freed++;
|
||||||
|
|
||||||
|
cond_resched();
|
||||||
}
|
}
|
||||||
out:
|
out:
|
||||||
return nr_freed;
|
return nr_freed;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче