On 11/26/2018 11:53 AM, Qian Cai wrote: > CONFIG_DEBUG_OBJECTS_RCU_HEAD does not play well with kmemleak due to > recursive calls. > > fill_pool > kmemleak_ignore > make_black_object > put_object > __call_rcu (kernel/rcu/tree.c) > debug_rcu_head_queue > debug_object_activate > debug_object_init > fill_pool > kmemleak_ignore > make_black_object > ... > > Hence, adding SLAB_NOLEAKTRACE to kmem_cache_create() to not register a > newly allocated debug objects at all. > > Suggested-by: Catalin Marinas <[email protected]> > Signed-off-by: Qian Cai <[email protected]> > --- > lib/debugobjects.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/lib/debugobjects.c b/lib/debugobjects.c > index eab7727b46ed..55437fd5128b 100644 > --- a/lib/debugobjects.c > +++ b/lib/debugobjects.c > @@ -135,7 +135,6 @@ static void fill_pool(void) > if (!new) > return; > > - kmemleak_ignore(new); > raw_spin_lock_irqsave(&pool_lock, flags); > hlist_add_head(&new->node, &obj_pool); > debug_objects_allocated++; > @@ -1128,7 +1127,6 @@ static int __init > debug_objects_replace_static_objects(void) > obj = kmem_cache_zalloc(obj_cache, GFP_KERNEL); > if (!obj) > goto free; > - kmemleak_ignore(obj); > hlist_add_head(&obj->node, &objects); > } > > @@ -1182,7 +1180,8 @@ void __init debug_objects_mem_init(void) > > obj_cache = kmem_cache_create("debug_objects_cache", > sizeof (struct debug_obj), 0, > - SLAB_DEBUG_OBJECTS, NULL); > + SLAB_DEBUG_OBJECTS | SLAB_NOLEAKTRACE, > + NULL); > > if (!obj_cache || debug_objects_replace_static_objects()) { > debug_objects_enabled = 0;
Acked-by: Waiman Long <[email protected]>

