mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-09-22 09:34:56 +02:00
mm/damon/tests/core-kunit: add KUnit test for walk_control_obsolete behavior
Add a KUnit test to verify that damos_walk() rejects new requests when
walk_control_obsolete is set.
Commit 33c3f6c2b4 ("mm/damon/core: fix damos_walk() vs kdamond_fn() exit
race") introduced walk_control_obsolete to prevent a race condition where
new requests could be registered during kdamond shutdown and never
handled.
This test simulates the shutdown condition by setting
walk_control_obsolete and verifies that damos_walk() returns -ECANCELED
immediately.
This validates the invariant introduced by the fix and helps prevent
regressions.
Link: https://patch.msgid.link/20260612062337.2459-1-saileshnandanavanam@gmail.com
Link: https://lore.kernel.org/20260629145538.134832-6-sj@kernel.org
Suggested-by: SJ Park <sj@kernel.org>
Signed-off-by: Sailesh Nandanavanam <saileshnandanavanam@gmail.com>
Signed-off-by: SJ Park <sj@kernel.org>
Reviewed-by: SJ Park <sj@kernel.org>
Cc: Akinobu Mita <akinobu.mita@gmail.com>
Cc: Asier Gutierrez <gutierrez.asier@huawei-partners.com>
Cc: Brendan Higgins <brendan.higgins@linux.dev>
Cc: David Hildenbrand <david@kernel.org>
Cc: Doehyun Baek <doehyunbaek@gmail.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: "Liam R. Howlett" <liam@infradead.org>
Cc: Lorenzo Stoakes <ljs@kernel.org>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Philippe Laferriere <plafer@proton.me>
Cc: Shuah Khan <skhan@linuxfoundation.org>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Vlastimil Babka <vbabka@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
committed by
Andrew Morton
parent
2ab5ed1c2b
commit
bafe4dbbd5
@@ -1456,6 +1456,33 @@ static void damon_test_is_last_region(struct kunit *test)
|
||||
damon_free_target(t);
|
||||
}
|
||||
|
||||
/*
|
||||
* Verify that damos_walk() rejects new requests when
|
||||
* walk_control_obsolete is set.
|
||||
*
|
||||
* This tests the invariant introduced by:
|
||||
* commit 33c3f6c2b48c ("mm/damon/core: fix damos_walk() vs kdamond_fn() exit race")
|
||||
*/
|
||||
static void damon_test_walk_control_obsolete(struct kunit *test)
|
||||
{
|
||||
struct damon_ctx *ctx;
|
||||
struct damos_walk_control control = {};
|
||||
int ret;
|
||||
|
||||
ctx = damon_new_ctx();
|
||||
if (!ctx)
|
||||
kunit_skip(test, "ctx alloc fail");
|
||||
|
||||
/* Simulate shutdown phase */
|
||||
ctx->walk_control_obsolete = true;
|
||||
|
||||
ret = damos_walk(ctx, &control);
|
||||
|
||||
KUNIT_EXPECT_EQ(test, ret, -ECANCELED);
|
||||
|
||||
damon_destroy_ctx(ctx);
|
||||
}
|
||||
|
||||
static struct kunit_case damon_test_cases[] = {
|
||||
KUNIT_CASE(damon_test_target),
|
||||
KUNIT_CASE(damon_test_regions),
|
||||
@@ -1485,6 +1512,7 @@ static struct kunit_case damon_test_cases[] = {
|
||||
KUNIT_CASE(damon_test_set_filters_default_reject),
|
||||
KUNIT_CASE(damon_test_apply_min_nr_regions),
|
||||
KUNIT_CASE(damon_test_is_last_region),
|
||||
KUNIT_CASE(damon_test_walk_control_obsolete),
|
||||
{},
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user