mm-damon-core-skip-aging-from-repeated-aggressive-merging.patch removed from -mm tree
The quilt patch titled
Subject: mm/damon/core: skip aging from repeated aggressive merging
has been removed from the -mm tree. Its filename was
mm-damon-core-skip-aging-from-repeated-aggressive-merging.patch
This patch was dropped because it was merged into the mm-stable branch of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
------------------------------------------------------
From: SJ Park <[email protected]>
Subject: mm/damon/core: skip aging from repeated aggressive merging
Date: Sun, 12 Jul 2026 09:54:30 -0700
The number of DAMON regions could temporarily exceed the user-defined maximum number of regions limit for corner cases. For example, users could lower the limit via runtime parameters update. For such a case, kdamond_merge_regions() repeats merging regions in the case doubling the merge threshold. The repeated merge operation could update the age of regions multiple times. This corrupts the monitoring results. Fix the issue by asking the merge operation to skip aging for the corner case.
The user impact is degradation of the monitoring quality. The impact should be mild, since the degradation is only temporal, and it is not common to happen in realistic setups.
The issue was discovered [1,2] by Sashiko.
---
mm/damon/core.c | 21 +++++++++++++-------- mm/damon/tests/core-kunit.h | 2 +- 2 files changed, 14 insertions(+), 9 deletions(-)
mm/damon/core.c renamed from mm/damon/core.c~mm-damon-core-skip-aging-from-repeated-aggressive-merging +13 -8
@@ -3308,7 +3308,7 @@ static unsigned int damon_merge_score(st* sz_limit size upper limit of each region */ static void damon_merge_regions_of (struct damon_target *t,unsigned int thres, -unsigned long sz_limit,struct damon_ctx *ctx) +unsigned long sz_limit,struct damon_ctx *ctx,bool count_age) {struct damon_region *r, *prev =NULL , *next;bool use_probe_hits =damon_has_probe_weights (ctx);
@@ -3319,12 +3319,14 @@ static void damon_merge_regions_of(struc score =damon_merge_score (r, false, ctx, use_probe_hits); last_score =damon_merge_score (r, true, ctx, use_probe_hits); -if (abs_diff (score, last_score) > thres) - r->age =0 ; -else if ((score ==0 ) != (last_score ==0 )) - r->age =0 ; -else - r->age++; +if (count_age) { +if (abs_diff (score, last_score) > thres) + r->age =0 ; +else if ((score ==0 ) != (last_score ==0 )) + r->age =0 ; +else + r->age++; + }if (!prev) goto set_prev_continue;
@@ -3366,15 +3368,18 @@ static void kdamond_merge_regions(structstruct damon_target *t;unsigned int nr_regions;unsigned int max_thres; +bool count_age = true; max_thres = c->attrs.aggr_interval / (c->attrs.sample_interval ? c->attrs.sample_interval :1 );do { nr_regions =0 ;damon_for_each_target (t, c) { -damon_merge_regions_of (t, threshold, sz_limit, c); +damon_merge_regions_of (t, threshold, sz_limit, c, + count_age); nr_regions +=damon_nr_regions (t); } + count_age = false; threshold =max (1 , threshold *2 ); }while (nr_regions > c->attrs.max_nr_regions && threshold /2 < max_thres);
mm/damon/tests/core-kunit.h renamed from mm/damon/tests/core-kunit.h~mm-damon-core-skip-aging-from-repeated-aggressive-merging +1 -1
@@ -257,7 +257,7 @@ static void damon_test_merge_regions_of(damon_add_region (r, t); } -damon_merge_regions_of (t,9 ,9999 , ctx); +damon_merge_regions_of (t,9 ,9999 , ctx, true);/* 0-112, 114-130, 130-156, 156-170, 170-230, 230-10170 */ KUNIT_EXPECT_EQ (test,damon_nr_regions (t),6u );for (i =0 ; i <6 ; i++) {
_
Patches currently in -mm which might be from [email protected] are