kunit, slub: Add test_kfree_rcu_wq_destroy use case
authorUladzislau Rezki (Sony) <urezki@gmail.com>
Fri, 28 Feb 2025 12:13:55 +0000 (13:13 +0100)
committerVlastimil Babka <vbabka@suse.cz>
Tue, 4 Mar 2025 07:53:50 +0000 (08:53 +0100)
commit7e384dbb57e2c3cef7e70d4913b0cc4caedf0a1f
treea0bcfdbfa358161a280b47f57c70432e03ea5597
parent4b183dd9359d5772446cb634b12a383bed98c4fc
kunit, slub: Add test_kfree_rcu_wq_destroy use case

Add a test_kfree_rcu_wq_destroy test to verify a kmem_cache_destroy()
from a workqueue context. The problem is that, before destroying any
cache the kvfree_rcu_barrier() is invoked to guarantee that in-flight
freed objects are flushed.

The _barrier() function queues and flushes its own internal workers
which might conflict with a workqueue type a kmem-cache gets destroyed
from.

One example is when a WQ_MEM_RECLAIM workqueue is flushing !WQ_MEM_RECLAIM
events which leads to a kernel splat. See the check_flush_dependency() in
the workqueue.c file.

If this test does not emits any kernel warning, it is passed.

Reviewed-by: Keith Busch <kbusch@kernel.org>
Co-developed-by: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
lib/slub_kunit.c