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:
parent
80f22e99f4
commit
20ad0478c8
@ -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(¤t_rpool->count);
|
||||
/* The actuall allocation - kmemleak should start tracking page */
|
||||
kmemleak_alloc(entry, rpool_master->entry_size, 1, GFP_NOIO);
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(¤t_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,
|
||||
|
Loading…
Reference in New Issue
Block a user