selftests/damon/sysfs.py: validate memcg_path staging readback

Add a dedicated test at the end of main() that stages memcg_path via sysfs
and verifies its readback.  Configure the memcg filter before start(), do
not call commit(), and ignore start() failures so the test does not depend
on CONFIG_MEMCG or cgroup layout.  Call stop() for cleanup without
checking its return value.

Link: https://lore.kernel.org/D2B37130D38E09AC+20260601090634.241864-1-niecheng1@uniontech.com
Link: https://lore.kernel.org/20260629144812.134159-3-sj@kernel.org
Signed-off-by: Cheng Nie <niecheng1@uniontech.com>
Signed-off-by: SJ Park <sj@kernel.org>
Reviewed-by: SJ Park <sj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
Cheng Nie
2026-06-29 07:48:11 -07:00
committed by Andrew Morton
parent 477e99645f
commit 9b413dff81

View File

@@ -250,6 +250,35 @@ def assert_ctxs_committed(kdamonds):
if ctx in ctxs_paused_for_dump:
ctx.pause = False
def test_memcg_filter_memcg_path_staging():
global kdamonds
memcg_filter = _damon_sysfs.DamosFilter(
type_='memcg', matching=True, allow=True, memcg_path='/')
kdamonds = _damon_sysfs.Kdamonds(
[_damon_sysfs.Kdamond(
contexts=[_damon_sysfs.DamonCtx(
targets=[_damon_sysfs.DamonTarget(pid=-1)],
schemes=[_damon_sysfs.Damos(
ops_filters=[memcg_filter])],
)])])
kdamonds.start()
shown, rd_err = _damon_sysfs.read_file(
os.path.join(memcg_filter.sysfs_dir(), 'memcg_path'))
if rd_err is not None:
print('memcg_path staging: sysfs read (%s)' % rd_err)
kdamonds.stop()
exit(1)
if shown.rstrip('\n') != memcg_filter.memcg_path:
print('memcg_path staging: memcg_path readback '
'(shown=%s, expected=%s)' %
(shown.rstrip('\n'), memcg_filter.memcg_path))
kdamonds.stop()
exit(1)
kdamonds.stop()
kdamonds = None
def main():
global kdamonds
kdamonds = _damon_sysfs.Kdamonds(
@@ -356,5 +385,7 @@ def main():
assert_ctxs_committed(kdamonds)
kdamonds.stop()
test_memcg_filter_memcg_path_staging()
if __name__ == '__main__':
main()