[PATCH v2] mm/damon/core: allow esz to be set to zero

From: Liew Rui Yan

Date: Wed Sep 02 2026 - 04:27:03 EST


When the temporal quota goal tuner determines that the goal has been
achieved (score >= 10000), it sets esz_bp to zero so that the effective
quota (esz) becomes zero. However, damos_set_effective_quota() clamps
the quota to min_region_sz, preventing the quota from ever reaching
zero.

Fix this by adding a check for zero esz_bp.

Fixes: 8bbde987c2b8 ("mm/damon/core: disallow time-quota setting zero esz")
Cc: <stable@xxxxxxxxxxxxxxx> # v7.1.x
Signed-off-by: Liew Rui Yan <aethernet65535@xxxxxxxxx>
---

Changes from v1:
- v1: https://lore.kernel.org/damon/20260901105951.106246-1-aethernet65535@xxxxxxxxx
- Changed implementation. The initial solution skipped the
min_region_sz clamping when esz was already zero. However, this would
revert the fix from commit 8bbde987c2b8 and cause a regression. This
revision fixes the issue by adding a specific check for a zero esz_bp.
- Changed patch title, original title: fix quota could not be set to
zero

---
mm/damon/core.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/mm/damon/core.c b/mm/damon/core.c
index e13a154aa4b9..8e3ded1a2cf6 100644
--- a/mm/damon/core.c
+++ b/mm/damon/core.c
@@ -3133,6 +3133,9 @@ static void damos_set_effective_quota(struct damon_ctx *ctx, struct damos *s)
if (quota->sz && quota->sz < esz)
esz = quota->sz;

+ if (!quota->esz_bp)
+ esz = 0;
+
quota->esz = esz;
}

--
2.55.0