[PATCH v2] memcg/functional: fix memcg_failcnt intermittent timeout by disabling swap
Xuewen Wang <wangxuewen-UOlijcLmZ/[email protected]> Wed, 5 Aug 2026 14:40:53 +0800
| Newsgroups | gmane.linux.ltp |
|---|---|
| Message-ID | <[email protected]> |
memcg_failcnt.sh tests the memory.failcnt counter by allocating reclaimable memory (mmap-anon/mmap-file/shm) beyond a tiny cgroup limit (1 page). It relies on the process being OOM-killed so that signal_memcg_process()'s wait loop exits. With swap enabled the kernel usually still OOM-kills the process, but on arm64 reclaim (swap out) sometimes succeeds instead: usage_in_bytes stays at the limit and the process keeps running, so the wait loop times out (TBROK) intermittently. Example failure on arm64 (kernel 6.6): memcg_failcnt 2 TBROK: timed out on memory.usage_in_bytes 4096 0 8192 Disable swap around the allocation and re-enable it afterwards, mirroring what memcg_limit_in_bytes.sh already does for the same reclaimable memory types. Signed-off-by: Xuewen Wang <wangxuewen-UOlijcLmZ/[email protected]> --- Changes in v2: - Drop "2>/dev/null" from swapoff/swapon so that a failure to disable swap (or a missing swapoff binary) stays visible, instead of silently letting the intermittent timeout recur. Per the LTP AI review, the redirect hid the very error this fix relies on, and memcg_limit_in_bytes.sh does not redirect stderr either. --- .../controllers/memcg/functional/memcg_failcnt.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/testcases/kernel/controllers/memcg/functional/memcg_failcnt.sh b/testcases/kernel/controllers/memcg/functional/memcg_failcnt.sh index 3a02d16c2..9ac3880f6 100755 --- a/testcases/kernel/controllers/memcg/functional/memcg_failcnt.sh +++ b/testcases/kernel/controllers/memcg/functional/memcg_failcnt.sh @@ -11,11 +11,20 @@ MEMCG_TESTFUNC=do_test MEMCG_SHMMAX=1 TST_TEST_DATA="--mmap-anon --mmap-file --shm" +TST_CLEANUP=do_cleanup + +do_cleanup() +{ + memcg_cleanup + swapon -a +} do_test() { ROD echo $MEMORY_LIMIT \> memory.limit_in_bytes + swapoff -a + start_memcg_process $2 -s ${MEMORY_TO_ALLOCATE} ROD echo $MEMCG_PROCESS_PID \> tasks @@ -24,6 +33,8 @@ do_test() stop_memcg_process + swapon -a + failcnt=$(cat memory.failcnt) if [ $failcnt -gt 0 ]; then tst_res TPASS "memory.failcnt is $failcnt, > 0 as expected" -- 2.25.1 -- Mailing list info: https://lists.linux.it/listinfo/ltp