From: Li Wang <li.wang@linux.dev>
To: ltp@lists.linux.it, li.wang@linux.dev
Cc: Li Wang <liwang@hygon.cn>
Subject: [LTP] [PATCH 1/2] madvise09: restore cgroup v1 memory limits with numeric values
Date: Thu, 30 Jul 2026 15:41:19 +0800 [thread overview]
Message-ID: <20260730074120.180101-1-li.wang@linux.dev> (raw)
From: Li Wang <liwang@hygon.cn>
madvise09 resets memory.max and memory.swap.max to "max" before retrying
the child process, so the retried child does not inherit the strict memory
limits from the previous run.
This works for cgroup v2, where "max" is the valid unlimited value.
However, cgroup v1 memory.limit_in_bytes does not accept the string "max".
When the LTP cgroup abstraction maps memory.max to the v1 memory limit
knob, writing "max" can fail with EINVAL:
tst_test.c:1875: TINFO: Overall timeout per run is 0h 00m 30s
madvise09.c:154: TBROK: vdprintf(18</sys/fs/cgroup/memory/ltp/test-27493>,
'memory.limit_in_bytes', '%s'<max>): EINVAL (22)
tst_test.c:478: TINFO: Child process reported TBROK killing the test
tst_test.c:1938: TINFO: Killed the leftover descendant processes
Save the original cgroup v1 memory and swap limits during setup and
restore those numeric values on retry. Keep using "max" for cgroup v2.
Fixes: c118be931cd ("madvise09: Reset cgroup limits before retrying test")
Signed-off-by: Li Wang <liwang@hygon.cn>
---
testcases/kernel/syscalls/madvise/madvise09.c | 29 ++++++++++++++-----
1 file changed, 22 insertions(+), 7 deletions(-)
diff --git a/testcases/kernel/syscalls/madvise/madvise09.c b/testcases/kernel/syscalls/madvise/madvise09.c
index 2fc1da581..2e792bd11 100644
--- a/testcases/kernel/syscalls/madvise/madvise09.c
+++ b/testcases/kernel/syscalls/madvise/madvise09.c
@@ -54,8 +54,8 @@ static int swap_accounting_enabled;
#define TOUCHED_PAGE1 0
#define TOUCHED_PAGE2 10
-static long long mem_limit;
-static long long swap_limit;
+static long long mem_limit, ori_mem_limit;
+static long long swap_limit, ori_swap_limit;
static void memory_pressure_child(void)
{
@@ -151,9 +151,17 @@ static void child(void)
* Otherwise, the retried child inherits the strict MEM_LIMIT from the previous
* run, causing MADV_FREE pages to be dropped immediately before we touch them.
*/
- SAFE_CG_PRINT(tst_cg, "memory.max", "max");
- if (swap_accounting_enabled)
- SAFE_CG_PRINT(tst_cg, "memory.swap.max", "max");
+ if (TST_CG_VER_IS_V1(tst_cg, "memory")) {
+ SAFE_CG_PRINTF(tst_cg, "memory.max", "%lld", ori_mem_limit);
+
+ if (swap_accounting_enabled)
+ SAFE_CG_PRINTF(tst_cg, "memory.swap.max", "%lld", ori_swap_limit);
+ } else {
+ SAFE_CG_PRINT(tst_cg, "memory.max", "max");
+
+ if (swap_accounting_enabled)
+ SAFE_CG_PRINT(tst_cg, "memory.swap.max", "max");
+ }
ptr = SAFE_MMAP(NULL, PAGES * page_size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
@@ -278,10 +286,17 @@ retry:
static void setup(void)
{
- if (SAFE_CG_HAS(tst_cg, "memory.swap.max"))
+ if (TST_CG_VER_IS_V1(tst_cg, "memory"))
+ SAFE_CG_SCANF(tst_cg, "memory.max", "%lld", &ori_mem_limit);
+
+ if (SAFE_CG_HAS(tst_cg, "memory.swap.max")) {
swap_accounting_enabled = 1;
- else
+
+ if (TST_CG_VER_IS_V1(tst_cg, "memory"))
+ SAFE_CG_SCANF(tst_cg, "memory.swap.max", "%lld", &ori_swap_limit);
+ } else {
tst_res(TINFO, "Swap accounting is disabled");
+ }
page_size = getpagesize();
--
2.55.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
next reply other threads:[~2026-07-30 7:41 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-30 7:41 Li Wang [this message]
2026-07-30 7:41 ` [LTP] [PATCH 2/2] mailmap: enable liwang@hygon.cn address Li Wang
2026-07-30 8:26 ` Andrea Cervesato via ltp
2026-07-30 9:51 ` Petr Vorel
2026-07-30 10:09 ` Li Wang
2026-07-30 11:02 ` Andrea Cervesato via ltp
2026-07-30 8:29 ` [LTP] madvise09: restore cgroup v1 memory limits with numeric values linuxtestproject.agent
2026-07-30 9:43 ` Li Wang
2026-07-30 11:24 ` [LTP] [PATCH 1/2] " Andrea Cervesato via ltp
2026-07-30 12:52 ` Li Wang
2026-07-30 12:55 ` Andrea Cervesato via ltp
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260730074120.180101-1-li.wang@linux.dev \
--to=li.wang@linux.dev \
--cc=liwang@hygon.cn \
--cc=ltp@lists.linux.it \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox