]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
mm/damon/sysfs: set damon_ctx->min_sz_region only for paddr use case
authorSeongJae Park <sj@kernel.org>
Wed, 17 Sep 2025 15:31:54 +0000 (08:31 -0700)
committerAndrew Morton <akpm@linux-foundation.org>
Tue, 23 Sep 2025 21:14:16 +0000 (14:14 -0700)
damon_ctx->addr_unit is respected only for physical address space
monitoring use case.  Meanwhile, damon_ctx->min_sz_region is used by the
core layer for aligning regions, regardless of whether it is set for
physical address space monitoring or virtual address spaces monitoring.
And it is set as 'DAMON_MIN_REGION / damon_ctx->addr_unit'.  Hence, if
user sets ->addr_unit on virtual address spaces monitoring mode, regions
can be unexpectedly aligned in <PAGE_SIZE granularity.  It shouldn't cause
crash-like issues but make monitoring and DAMOS behavior difficult to
understand.

Fix the unexpected behavior by setting ->min_sz_region only when it is
configured for physical address space monitoring.

The issue was found from a result of Chris' experiments that thankfully
shared with me off-list.

Link: https://lkml.kernel.org/r/20250917160041.53187-1-sj@kernel.org
Fixes: d8f867fa0825 ("mm/damon: add damon_ctx->min_sz_region")
Signed-off-by: SeongJae Park <sj@kernel.org>
Cc: Chris Mason <clm@fb.com>
Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
Cc: ze zuo <zuoze1@huawei.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/damon/sysfs.c

index fe4e73d0ebbb4d4f0245789c3cf8f76aa0eca6e5..883b0d886d681b19c40c84aee890e90b966cc627 100644 (file)
@@ -1435,7 +1435,10 @@ static int damon_sysfs_apply_inputs(struct damon_ctx *ctx,
        if (err)
                return err;
        ctx->addr_unit = sys_ctx->addr_unit;
-       ctx->min_sz_region = max(DAMON_MIN_REGION / sys_ctx->addr_unit, 1);
+       /* addr_unit is respected by only DAMON_OPS_PADDR */
+       if (sys_ctx->ops_id == DAMON_OPS_PADDR)
+               ctx->min_sz_region = max(
+                               DAMON_MIN_REGION / sys_ctx->addr_unit, 1);
        err = damon_sysfs_set_attrs(ctx, sys_ctx->attrs);
        if (err)
                return err;