The patch titled Subject: mm/slab.c: fix an infinite loop in leaks_show() has been added to the -mm tree. Its filename is slab-fix-an-infinite-loop-in-leaks_show.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/slab-fix-an-infinite-loop-in-leaks_show.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/slab-fix-an-infinite-loop-in-leaks_show.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Qian Cai <cai@xxxxxx> Subject: mm/slab.c: fix an infinite loop in leaks_show() "cat /proc/slab_allocators" could hang forever on SMP machines with kmemleak or object debugging enabled due to other CPUs running do_drain() will keep making kmemleak_object or debug_objects_cache dirty and unable to escape the first loop in leaks_show(), do { set_store_user_clean(cachep); drain_cpu_caches(cachep); ... } while (!is_store_user_clean(cachep)); For example, do_drain slabs_destroy slab_destroy kmem_cache_free __cache_free ___cache_free kmemleak_free_recursive delete_object_full __delete_object put_object free_object_rcu kmem_cache_free cache_free_debugcheck --> dirty kmemleak_object One approach is to check cachep->name and skip both kmemleak_object and debug_objects_cache in leaks_show(). The other is to set store_user_clean after drain_cpu_caches() which leaves a small window between drain_cpu_caches() and set_store_user_clean() where per-CPU caches could be dirty again lead to slightly wrong information has been stored but could also speed up things significantly which sounds like a good compromise. For example, # cat /proc/slab_allocators 0m42.778s # 1st approach 0m0.737s # 2nd approach Link: http://lkml.kernel.org/r/20190411032635.10325-1-cai@xxxxxx Fixes: d31676dfde25 ("mm/slab: alternative implementation for DEBUG_SLAB_LEAK") Signed-off-by: Qian Cai <cai@xxxxxx> Cc: Vlastimil Babka <vbabka@xxxxxxx> Cc: Christoph Lameter <cl@xxxxxxxxx> Cc: Pekka Enberg <penberg@xxxxxxxxxx> Cc: David Rientjes <rientjes@xxxxxxxxxx> Cc: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- mm/slab.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) --- a/mm/slab.c~slab-fix-an-infinite-loop-in-leaks_show +++ a/mm/slab.c @@ -4327,8 +4327,12 @@ static int leaks_show(struct seq_file *m * whole processing. */ do { - set_store_user_clean(cachep); drain_cpu_caches(cachep); + /* + * drain_cpu_caches() could always make kmemleak_object and + * debug_objects_cache dirty, so reset afterwards. + */ + set_store_user_clean(cachep); x[1] = 0; _ Patches currently in -mm which might be from cai@xxxxxx are slab-store-tagged-freelist-for-off-slab-slabmgmt.patch mm-hotplug-treat-cma-pages-as-unmovable.patch mm-hotplug-treat-cma-pages-as-unmovable-v4.patch slab-fix-an-infinite-loop-in-leaks_show.patch mm-compaction-fix-an-undefined-behaviour.patch initramfs-cleanup-populate_rootfs-fix.patch