[LTP] [PATCH v2] memcg/functional: fix memcg_failcnt intermittent timeout by disabling swap
Xuewen Wang
wangxuewen@kylinos.cn
Wed Aug 5 08:40:53 CEST 2026
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@kylinos.cn>
---
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
More information about the ltp
mailing list