linux/mm/damon
SJ Park 1ec0e6b6f7 mm/damon: adjust isolated pages stat for DAMOS_MIGRATE_{HOT,COLD}
Callers of migrate_pages() should adjust NR_MIGRATED_{ANON,FILE} for
isolations and putback of the folios.  That for migration succeeded folios
is done by migrate_pages(), in migrate_folio_done().  That for MR_DEMOTION
reason is an exception though.

DAMOS_MIGRATE_{HOT,COLD} call migrate_pages() but mistakenly not doing the
stat adjustment.  As a result, use of DAMOS_MIGRATE_{HOT,COLD} could
corrupt the stat.  It could confuse too_many_isolated(), make compaction
and reclaim to behave in unexpected ways.  The stat corruption can be
reproduced and confirmed using DAMON user-space tool [1] on NUMA systems,
like below.

    $ numactl --hardware
    available: 2 nodes (0-1)
    [...]
    $ sudo ./damo start --damos_action migrate_hot 1
    $ sudo cat /proc/sys/vm/stat_refresh
    $ sudo dmesg
    [...]
    [   80.215554] vmstat_refresh: nr_isolated_anon -5578
    [   80.216842] vmstat_refresh: nr_isolated_file -34400

This issue was discovered [2] by Sashiko.

Link: https://lore.kernel.org/20260728140404.94476-1-sj@kernel.org
Link: https://github.com/damonitor/damo [1]
Link: https://lore.kernel.org/20260726164356.87940-1-sj@kernel.org [2]
Fixes: b51820ebea ("mm/damon/paddr: introduce DAMOS_MIGRATE_COLD action for demotion")
Signed-off-by: SJ Park <sj@kernel.org>
Cc: Honggyu Kim <honggyu.kim@sk.com>
Cc: Hyeongtak Ji <hyeongtak.ji@sk.com>
Cc: <stable@vger.kernel.org> # 6.11.x
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2026-08-04 20:02:04 -07:00
..
tests MAINTAINERS: s/SeongJae/SJ/ 2026-07-09 15:48:53 -07:00
core.c mm/damon/core: disallow overlapping input ranges for damon_set_regions() 2026-07-09 15:48:55 -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: skip damon_call() if ctx has not started 2026-08-04 20:02:03 -07:00
Makefile mm/damon: introduce DAMON_STAT module 2025-07-09 22:41:55 -07:00
modules-common.c MAINTAINERS: s/SeongJae/SJ/ 2026-07-09 15:48:53 -07:00
modules-common.h MAINTAINERS: s/SeongJae/SJ/ 2026-07-09 15:48:53 -07:00
ops-common.c mm/damon: adjust isolated pages stat for DAMOS_MIGRATE_{HOT,COLD} 2026-08-04 20:02:04 -07:00
ops-common.h MAINTAINERS: s/SeongJae/SJ/ 2026-07-09 15:48:53 -07:00
paddr.c mm/damon: adjust isolated pages stat for DAMOS_MIGRATE_{HOT,COLD} 2026-08-04 20:02:04 -07:00
reclaim.c mm/damon/reclaim: skip damon_call() if ctx has not started 2026-08-04 20:02:03 -07:00
stat.c mm/damon/stat: add a parameter for reading kdamond pid 2026-05-28 21:05:08 -07:00
sysfs-common.c MAINTAINERS: s/SeongJae/SJ/ 2026-07-09 15:48:53 -07:00
sysfs-common.h MAINTAINERS: s/SeongJae/SJ/ 2026-07-09 15:48:53 -07:00
sysfs-schemes.c MAINTAINERS: s/SeongJae/SJ/ 2026-07-09 15:48:53 -07:00
sysfs.c MAINTAINERS: s/SeongJae/SJ/ 2026-07-09 15:48:53 -07:00
vaddr.c mm/damon: adjust isolated pages stat for DAMOS_MIGRATE_{HOT,COLD} 2026-08-04 20:02:04 -07:00