The CONSIST quota goal tuner initializes esz_bp to 0, producing an effective quota size (esz) of 1 byte on the first tick. damos_quota_is_full() rejects all regions when esz < min_region_sz (default PAGE_SIZE = 4096), so no regions can be tried and no feedback reaches the tuner — a bootstrapping deadlock. Floor esz at ctx->min_region_sz after the tuner computes it, guarded by an esz != 0 check. The guard preserves the temporal tuner's intentional stop behavior: when score >= 10000 (goal met), temporal sets esz_bp = 0 to halt migration; the floor must not override that. Signed-off-by: Ravi Jonnalagadda --- mm/damon/core.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mm/damon/core.c b/mm/damon/core.c index fd1db234ca304..d33c4360cbd60 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -2650,6 +2650,10 @@ static void damos_set_effective_quota(struct damon_ctx *ctx, struct damos *s) esz = quota->esz_bp / 10000; } + /* avoid cold-start deadlock, but respect tuner stop signal (esz=0) */ + if (esz) + esz = max_t(unsigned long, esz, ctx->min_region_sz); + if (quota->ms) { if (quota->total_charged_ns) throughput = mult_frac(quota->total_charged_sz, -- 2.43.0