mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
debugobjects: Fix conditions in fill_pool()
fill_pool() uses 'obj_pool_min_free' to decide whether objects should be handed back to the kmem cache. But 'obj_pool_min_free' records the lowest historical value of the number of objects in the object pool and not the minimum number of objects which should be kept in the pool. Use 'debug_objects_pool_min_level' instead, which holds the minimum number which was scaled to the number of CPUs at boot time. [ tglx: Massage change log ] Fixes:d26bf5056f
("debugobjects: Reduce number of pool_lock acquisitions in fill_pool()") Fixes:36c4ead6f6
("debugobjects: Add global free list and the counter") Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: stable@vger.kernel.org Link: https://lore.kernel.org/all/20240904133944.2124-3-thunder.leizhen@huawei.com
This commit is contained in:
parent
e4757c710b
commit
684d28feb8
@ -142,13 +142,14 @@ static void fill_pool(void)
|
|||||||
* READ_ONCE()s pair with the WRITE_ONCE()s in pool_lock critical
|
* READ_ONCE()s pair with the WRITE_ONCE()s in pool_lock critical
|
||||||
* sections.
|
* sections.
|
||||||
*/
|
*/
|
||||||
while (READ_ONCE(obj_nr_tofree) && (READ_ONCE(obj_pool_free) < obj_pool_min_free)) {
|
while (READ_ONCE(obj_nr_tofree) &&
|
||||||
|
READ_ONCE(obj_pool_free) < debug_objects_pool_min_level) {
|
||||||
raw_spin_lock_irqsave(&pool_lock, flags);
|
raw_spin_lock_irqsave(&pool_lock, flags);
|
||||||
/*
|
/*
|
||||||
* Recheck with the lock held as the worker thread might have
|
* Recheck with the lock held as the worker thread might have
|
||||||
* won the race and freed the global free list already.
|
* won the race and freed the global free list already.
|
||||||
*/
|
*/
|
||||||
while (obj_nr_tofree && (obj_pool_free < obj_pool_min_free)) {
|
while (obj_nr_tofree && (obj_pool_free < debug_objects_pool_min_level)) {
|
||||||
obj = hlist_entry(obj_to_free.first, typeof(*obj), node);
|
obj = hlist_entry(obj_to_free.first, typeof(*obj), node);
|
||||||
hlist_del(&obj->node);
|
hlist_del(&obj->node);
|
||||||
WRITE_ONCE(obj_nr_tofree, obj_nr_tofree - 1);
|
WRITE_ONCE(obj_nr_tofree, obj_nr_tofree - 1);
|
||||||
|
Loading…
Reference in New Issue
Block a user