linux/mm/damon
SeongJae Park f98590bc08 mm/damon/stat: detect and use fresh enabled value
DAMON_STAT updates 'enabled' parameter value, which represents the running
status of its kdamond, when the user explicitly requests start/stop of the
kdamond.  The kdamond can, however, be stopped even if the user explicitly
requested the stop, if ctx->regions_score_histogram allocation failure at
beginning of the execution of the kdamond.  Hence, if the kdamond is
stopped by the allocation failure, the value of the parameter can be
stale.

Users could show the stale value and be confused.  The problem will only
rarely happen in real and common setups because the allocation is arguably
too small to fail.  Also, unlike the similar bugs that are now fixed in
DAMON_RECLAIM and DAMON_LRU_SORT, kdamond can be restarted in this case,
because DAMON_STAT force-updates the enabled parameter value for user
inputs.  The bug is a bug, though.

The issue stems from the fact that there are multiple events that can
change the status, and following all the events is challenging. 
Dynamically detect and use the fresh status for the parameters when those
are requested.

The issue was dicovered [1] by Sashiko.

Link: https://lore.kernel.org/20260419161003.79176-4-sj@kernel.org
Link: https://lore.kernel.org/20260416040602.88665-1-sj@kernel.org [1]
Fixes: 369c415e60 ("mm/damon: introduce DAMON_STAT module")
Signed-off-by: SeongJae Park <sj@kernel.org>
Cc: Liew Rui Yan <aethernet65535@gmail.com>
Cc: <stable@vger.kernel.org> # 6.17.x
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2026-04-27 05:54:27 -07:00
..
tests mm/damon/tests/core-kunit: test goal_tuner commit 2026-04-05 13:53:26 -07:00
core.c 7 hotfixes. 6 are cc:stable and all are for MM. Please see the 2026-04-19 14:45:37 -07:00
Kconfig mm/damon: add CONFIG_DAMON_DEBUG_SANITY 2026-04-05 13:53:20 -07:00
lru_sort.c mm/damon/lru_sort: detect and use fresh enabled and kdamond_pid values 2026-04-27 05:54:27 -07:00
Makefile mm/damon: introduce DAMON_STAT module 2025-07-09 22:41:55 -07:00
modules-common.c mm/damon: s/primitives/code/ on comments 2025-06-05 21:55:41 -07:00
modules-common.h mm/damon: s/primitives/code/ on comments 2025-06-05 21:55:41 -07:00
ops-common.c mm/damon/ops-common: remove redudnant mmu notifier call in pmdp mkold 2026-03-24 14:38:25 -07:00
ops-common.h mm/damon/paddr: move filters existence check function to ops-common 2025-09-13 16:54:47 -07:00
paddr.c mm/damon: remove unused target param of get_scheme_score() 2026-04-05 13:53:00 -07:00
reclaim.c mm/damon/reclaim: detect and use fresh enabled and kdamond_pid values 2026-04-27 05:54:26 -07:00
stat.c mm/damon/stat: detect and use fresh enabled value 2026-04-27 05:54:27 -07:00
sysfs-common.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
sysfs-common.h mm/damon: s/primitives/code/ on comments 2025-06-05 21:55:41 -07:00
sysfs-schemes.c mm/damon/sysfs-schemes: protect path kfree() with damon_sysfs_lock 2026-04-27 05:54:26 -07:00
sysfs.c mm/damon/sysfs: dealloc repeat_call_control if damon_call() fails 2026-04-06 11:13:42 -07:00
vaddr.c mm/damon/vaddr: do not split regions for min_nr_regions 2026-04-05 13:53:11 -07:00