mm/damon/tests/core-kunit: add test for unconditionally skipping the last region

Commit b3723b596b ("mm/damon/core: fix unconditionally skip last
region") fixed a minor bug.

Add a KUnit test case to cover this behavior and prevent regressions in
the future.

Link: https://lore.kernel.org/20261006065209.41507-4-sj@kernel.org
Signed-off-by: Liew Rui Yan <aethernet65535@gmail.com>
Signed-off-by: SJ Park <sj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Reviewed-by: SJ Park <sj@kernel.org>
Cc: Brendan Higgins <brendan.higgins@linux.dev>
Cc: David Gow <davidgow@davidgow.net>
This commit is contained in:
Liew Rui Yan 2026-10-05 23:52:07 -07:00 committed by Andrew Morton
parent 8cb5bfe457
commit 20a0f2b470

View File

@ -2439,6 +2439,47 @@ static void damos_test_esz_goal_temporal(struct kunit *test)
damon_destroy_ctx(ctx);
}
static void damon_test_last_region_quota_reset(struct kunit *test)
{
struct damos s = {0};
struct damon_target *t;
struct damon_region *r1, *r2;
unsigned long min_region_sz = 1;
bool skipped;
t = damon_new_target();
if (!t)
kunit_skip(test, "target alloc fail");
r1 = damon_new_region(0, 100);
if (!r1) {
damon_free_target(t);
kunit_skip(test, "region 1 alloc fail");
}
damon_add_region(r1, t);
r2 = damon_new_region(100, 200);
if (!r2) {
damon_free_target(t);
kunit_skip(test, "region 2 alloc fail");
}
damon_add_region(r2, t);
s.quota.charge_target_from = t;
s.quota.charge_addr_from = r1->ar.end;
skipped = damos_skip_charged_region(t, r2, &s, min_region_sz);
/* 'r2' is not processed, it should not skip */
KUNIT_EXPECT_EQ(test, skipped, false);
/* 'r2' is last region, it should reset charge_{target,addr}_from */
KUNIT_EXPECT_PTR_EQ(test, s.quota.charge_target_from, NULL);
KUNIT_EXPECT_EQ(test, s.quota.charge_addr_from, 0);
damon_free_target(t);
}
static struct kunit_case damon_test_cases[] = {
KUNIT_CASE(damon_test_target),
KUNIT_CASE(damon_test_regions),
@ -2482,6 +2523,7 @@ static struct kunit_case damon_test_cases[] = {
KUNIT_CASE(damon_test_walk_control_obsolete),
KUNIT_CASE(damon_test_rand),
KUNIT_CASE(damos_test_esz_goal_temporal),
KUNIT_CASE(damon_test_last_region_quota_reset),
{},
};