The fixup of DAMOS quota charge pointers (damos->charge_{target,addr}_from) for removed targets and regions is done in damos_fix_stale_charge_pointers(). A similar fixup for invalid (terminated pid) targets is done in kdamond_apply_schemes(). Having similar fixups in different places only make it confusing to read the code. Consolidate the fixups into damos_fix_stale_charge_pointers(). Signed-off-by: SJ Park --- mm/damon/core.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/mm/damon/core.c b/mm/damon/core.c index 73b571b429cb3..ce75db510a9d3 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -3394,7 +3394,11 @@ static void damos_fix_stale_charge_pointers(struct damon_ctx *c, return; damon_for_each_target(t, c) { if (t == quota->charge_target_from) { - if (damon_nr_regions(t) > 0) + bool valid_target = true; + + if (c->ops.target_valid && !c->ops.target_valid(t)) + valid_target = false; + if (valid_target && damon_nr_regions(t) > 0) return; break; } @@ -3513,15 +3517,8 @@ static noinline_for_stack void kdamond_apply_schemes(struct damon_ctx *c) max_region_sz = damon_region_sz_limit(c); mutex_lock(&c->walk_control_lock); damon_for_each_target(t, c) { - if (c->ops.target_valid && c->ops.target_valid(t) == false) { - damon_for_each_scheme(s, c) { - if (s->quota.charge_target_from != t) - continue; - s->quota.charge_target_from = NULL; - s->quota.charge_addr_from = 0; - } + if (c->ops.target_valid && c->ops.target_valid(t) == false) continue; - } damos_apply_target(c, t, max_region_sz); } -- 2.47.3