On 14/08/06, Catalin Marinas <catalin.marinas@xxxxxxxxx> wrote:
> The kmemleak+slab locking is a bit complicated because memleak itself
> needs to allocate memory and avoid recursive calls to it (the
> pointer_cache and the radix_tree allocations). The kmemleak-related
> allocations are not tracked by kmemleak.
>
> I see the following solutions:
>
> 1. acquire the memleak_lock at the beginning of an alloc/free function
> and release it when finished while allowing recursive/nested calls
> (and only call the memleak_* functions during the outermost lock).
> This would mean ignoring the off-slab management allocations as these
> would lead to deadlock because of the recursive call into kmemleak.
> This locking should be placed around cache_reap() as well (actually,
> around all the entry points in the mm/slab.c file).
This would actually work because the slab allocation functions may sleep.