mirror of
https://github.com/torvalds/linux.git
synced 2026-09-14 16:10:02 +02:00
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:
|
||
|---|---|---|
| .. | ||
| tests | ||
| core.c | ||
| Kconfig | ||
| lru_sort.c | ||
| Makefile | ||
| modules-common.c | ||
| modules-common.h | ||
| ops-common.c | ||
| ops-common.h | ||
| paddr.c | ||
| reclaim.c | ||
| stat.c | ||
| sysfs-common.c | ||
| sysfs-common.h | ||
| sysfs-schemes.c | ||
| sysfs.c | ||
| vaddr.c | ||