* [PATCH 6.6.y] mm/damon/core: don't skip damos_adjust_quota() while esz is not zero
[not found] <2026100318-preteen-hazelnut-d38b@gregkh>
@ 2026-10-03 15:48 ` SJ Park
2026-10-03 17:56 ` sashiko-bot
2026-10-04 16:29 ` Sasha Levin
0 siblings, 2 replies; 4+ messages in thread
From: SJ Park @ 2026-10-03 15:48 UTC (permalink / raw)
To: stable; +Cc: damon, SJ Park, Andrew Morton, Kunwu Chan
DAMOS could unexpectedly stop working when a user disables quota using the
online parameters commit feature. Fix it by correcting a wrong quota
unset check in damos_adjust_quota().
DAMON users could disable all quotas by unsetting time and size quotas,
and removing all quota goals. The intention of disabling quotas would be
making DAMOS run at full speed. When such quota disabled setup is
detected, damos_adjust_quota() skips all its work. The skipped works
include effective size quota (damos_quota->esz) updates and charged quota
amount (damos_quota->charged_sz) resets. The intention is to avoid doing
unnecessary work when quotas are disabled.
However, users could do the setup while effective size quota is non-zero,
by doing the disabling with the online DAMON parameters commit feature.
In this case, because the effective size quota exists, DAMOS will keep
working with the quota until it is fully charged. After the effective
quota is fully charged, the charged quota amount (damos_quota->charged_sz)
cannot be reset because damos_adjust_quota() skips it. Then, DAMOS stops
working until the quota is newly set or DAMON is entirely restarted.
The problem happens because damos_adjust_quota() assumes the user setup
for disabling quota immediately disabled it. In reality, the quota is
still working until the effective size quota is also updated to zero.
Other logic for catching that uses damos_quota_is_set(), which understands
the fact and therefore checks the effective size quota in addition to the
user setup. Fix the issue by using damos_quota_is_set() in
damos_adjust_quota() to determine if its works should be skipped.
The user impact is a non-deterministic and unexpected DAMOS stop behavior.
That is, users would disable quotas using the online parameters commit
feature, expecting DAMOS will run at full speed. However, depending on
the timing, the setup can be updated while the effective size quota is
non-zero. Due to the above mentioned internal mechanism, DAMOS stops
working instead of running at full speed. It is unexpected behavior. It
is also non-deterministic because sometimes the setup is done when the
effective size quota is zero, depending on the timing. It doesn't cause
critical issues like crashes or leaks. Users can simply set a reasonable
quota again, or restart DAMON. But definitely it is an unexpected and
non-deterministic behavior that makes it difficult to reliably use. Also
investigating the root cause of the behavior would be quite difficult.
Link: https://lore.kernel.org/20260916135020.86483-1-sj@kernel.org
Fixes: da87878010e5 ("mm/damon/sysfs: support online inputs update")
Signed-off-by: SJ Park <sj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Reviewed-by: Kunwu Chan <kunwu.chan@gmail.com>
Cc: <stable@vger.kernel.org> # 5.19.x
Signed-off-by: SJ Park <sj@kernel.org>
---
mm/damon/core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mm/damon/core.c b/mm/damon/core.c
index fe91b296f4c6..bd46a63b611c 100644
--- a/mm/damon/core.c
+++ b/mm/damon/core.c
@@ -1087,7 +1087,7 @@ static void damos_adjust_quota(struct damon_ctx *c, struct damos *s)
unsigned long cumulated_sz;
unsigned int score, max_score = 0;
- if (!quota->ms && !quota->sz)
+ if (!quota->esz && !quota->ms && !quota->sz)
return;
/* First charge window */
--
2.47.3
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 6.6.y] mm/damon/core: don't skip damos_adjust_quota() while esz is not zero
2026-10-03 15:48 ` [PATCH 6.6.y] mm/damon/core: don't skip damos_adjust_quota() while esz is not zero SJ Park
@ 2026-10-03 17:56 ` sashiko-bot
2026-10-03 18:02 ` SJ Park
2026-10-04 16:29 ` Sasha Levin
1 sibling, 1 reply; 4+ messages in thread
From: sashiko-bot @ 2026-10-03 17:56 UTC (permalink / raw)
To: SJ Park; +Cc: damon
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] mm: commit message references nonexistent damos_quota_is_set()
- [Low] mm: outdated comment for damos_set_effective_quota()
--
commit bdd4b48218af232c248d2db96f0af460e859f59e
Author: SJ Park <sj@kernel.org>
mm/damon/core: don't skip damos_adjust_quota() while esz is not zero
DAMOS could unexpectedly stop working when a user disables quota using the
online parameters commit feature. Fix it by correcting a wrong quota
unset check in damos_adjust_quota().
Link: https://lore.kernel.org/20260916135020.86483-1-sj@kernel.org
> Other logic for catching that uses damos_quota_is_set(), which understands
> the fact and therefore checks the effective size quota in addition to the
> user setup. Fix the issue by using damos_quota_is_set() in
> damos_adjust_quota() to determine if its works should be skipped.
[Severity: Medium]
The commit message states the fix uses damos_quota_is_set(). However, the
code below checks the fields directly inline. Should the commit message
be updated to reflect the inline check?
> diff --git a/mm/damon/core.c b/mm/damon/core.c
> index fe91b296f4c66..bd46a63b611cf 100644
> --- a/mm/damon/core.c
> +++ b/mm/damon/core.c
> @@ -1087,7 +1087,7 @@ static void damos_adjust_quota(struct damon_ctx *c, struct damos *s)
> unsigned long cumulated_sz;
> unsigned int score, max_score = 0;
>
> - if (!quota->ms && !quota->sz)
> + if (!quota->esz && !quota->ms && !quota->sz)
> return;
[Severity: Low]
With this change, damos_adjust_quota() can proceed even when quota->ms and
quota->sz are zero. This allows damos_set_effective_quota() to be called
later in the function during a new charge window:
if (!time_in_range_open(...)) {
...
damos_set_effective_quota(quota);
}
Does this make the comment above damos_set_effective_quota() outdated? It
currently states:
/* Shouldn't be called if quota->ms and quota->sz are zero */
static void damos_set_effective_quota(struct damos_quota *quota)
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261003154818.24786-1-sj@kernel.org?part=1
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 6.6.y] mm/damon/core: don't skip damos_adjust_quota() while esz is not zero
2026-10-03 17:56 ` sashiko-bot
@ 2026-10-03 18:02 ` SJ Park
0 siblings, 0 replies; 4+ messages in thread
From: SJ Park @ 2026-10-03 18:02 UTC (permalink / raw)
To: sashiko-bot; +Cc: SJ Park, damon
On Sat, 03 Oct 2026 17:56:16 +0000 sashiko-bot@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
> - [Medium] mm: commit message references nonexistent damos_quota_is_set()
> - [Low] mm: outdated comment for damos_set_effective_quota()
> --
>
> commit bdd4b48218af232c248d2db96f0af460e859f59e
> Author: SJ Park <sj@kernel.org>
>
> mm/damon/core: don't skip damos_adjust_quota() while esz is not zero
>
> DAMOS could unexpectedly stop working when a user disables quota using the
> online parameters commit feature. Fix it by correcting a wrong quota
> unset check in damos_adjust_quota().
>
> Link: https://lore.kernel.org/20260916135020.86483-1-sj@kernel.org
>
> > Other logic for catching that uses damos_quota_is_set(), which understands
> > the fact and therefore checks the effective size quota in addition to the
> > user setup. Fix the issue by using damos_quota_is_set() in
> > damos_adjust_quota() to determine if its works should be skipped.
>
> [Severity: Medium]
> The commit message states the fix uses damos_quota_is_set(). However, the
> code below checks the fields directly inline. Should the commit message
> be updated to reflect the inline check?
No, since this is a backporting of the mainline commit.
>
> > diff --git a/mm/damon/core.c b/mm/damon/core.c
> > index fe91b296f4c66..bd46a63b611cf 100644
> > --- a/mm/damon/core.c
> > +++ b/mm/damon/core.c
> > @@ -1087,7 +1087,7 @@ static void damos_adjust_quota(struct damon_ctx *c, struct damos *s)
> > unsigned long cumulated_sz;
> > unsigned int score, max_score = 0;
> >
> > - if (!quota->ms && !quota->sz)
> > + if (!quota->esz && !quota->ms && !quota->sz)
> > return;
>
> [Severity: Low]
> With this change, damos_adjust_quota() can proceed even when quota->ms and
> quota->sz are zero. This allows damos_set_effective_quota() to be called
> later in the function during a new charge window:
>
> if (!time_in_range_open(...)) {
> ...
> damos_set_effective_quota(quota);
> }
>
> Does this make the comment above damos_set_effective_quota() outdated? It
> currently states:
>
> /* Shouldn't be called if quota->ms and quota->sz are zero */
> static void damos_set_effective_quota(struct damos_quota *quota)
That's out of the scope of this backport in my opinion.
>
> --
> Sashiko AI review · https://sashiko.dev/#/patchset/20261003154818.24786-1-sj@kernel.org?part=1
Thanks,
SJ
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 6.6.y] mm/damon/core: don't skip damos_adjust_quota() while esz is not zero
2026-10-03 15:48 ` [PATCH 6.6.y] mm/damon/core: don't skip damos_adjust_quota() while esz is not zero SJ Park
2026-10-03 17:56 ` sashiko-bot
@ 2026-10-04 16:29 ` Sasha Levin
1 sibling, 0 replies; 4+ messages in thread
From: Sasha Levin @ 2026-10-04 16:29 UTC (permalink / raw)
To: stable; +Cc: Sasha Levin, damon, SJ Park, Andrew Morton, Kunwu Chan
> DAMOS could unexpectedly stop working when a user disables quota using the
> online parameters commit feature. Fix it by correcting a wrong quota
> unset check in damos_adjust_quota().
Queued for 6.6, thanks.
--
Thanks,
Sasha
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-10-04 16:30 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <2026100318-preteen-hazelnut-d38b@gregkh>
2026-10-03 15:48 ` [PATCH 6.6.y] mm/damon/core: don't skip damos_adjust_quota() while esz is not zero SJ Park
2026-10-03 17:56 ` sashiko-bot
2026-10-03 18:02 ` SJ Park
2026-10-04 16:29 ` Sasha Levin
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.