rpool: Mark an entry for kmemleak outside of atomic context

The kmemleak_alloc() function can sleep, thus should not be called
under spinlock. This patch fixes bug occurring on debug kernel with
kmemleak enabled.

Signed-off-by: Robert Baldyga <robert.baldyga@huawei.com>
This commit is contained in:
Robert Baldyga 2024-09-02 12:16:59 +02:00
parent 80f22e99f4
commit 20ad0478c8

View File

@ -218,12 +218,15 @@ void *cas_rpool_try_get(struct cas_reserve_pool *rpool_master, int *cpu)
entry = RPOOL_ITEM_TO_ENTRY(rpool_master, item);
list_del(item);
atomic_dec(&current_rpool->count);
/* The actuall allocation - kmemleak should start tracking page */
kmemleak_alloc(entry, rpool_master->entry_size, 1, GFP_NOIO);
}
spin_unlock_irqrestore(&current_rpool->lock, flags);
if (entry) {
/* The actual allocation - kmemleak should start tracking page */
kmemleak_alloc(entry, rpool_master->entry_size, 1, GFP_NOIO);
}
CAS_DEBUG_PARAM("[%s]Removed item from reserve pool [%s] for cpu [%d], "
"items in pool %d", rpool_master->name,
item == NULL ? "SKIPPED" : "OK", *cpu,