From: Li Wang <liwang@redhat.com>
To: linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org,
akpm@linux-foundation.org
Cc: "Johannes Weiner" <hannes@cmpxchg.org>,
"Michal Hocko" <mhocko@kernel.org>,
"Michal Koutný" <mkoutny@suse.com>,
"Muchun Song" <muchun.song@linux.dev>,
"Nhat Pham" <nphamcs@gmail.com>, "Tejun Heo" <tj@kernel.org>,
"Roman Gushchin" <roman.gushchin@linux.dev>,
"Shakeel Butt" <shakeel.butt@linux.dev>,
"Yosry Ahmed" <yosryahmed@google.com>
Subject: [PATCH 1/5] selftests/cgroup: detect and handle global zswap state in test_zswap
Date: Wed, 11 Mar 2026 19:05:19 +0800 [thread overview]
Message-ID: <20260311110523.26624-1-liwang@redhat.com> (raw)
test_zswap currently checks only for zswap presence via /sys/module/zswap,
but does not account for the global runtime state in
/sys/module/zswap/parameters/enabled.
If zswap is configured but globally disabled, zswap cgroup tests may run in
an invalid environment and fail spuriously.
Add helpers to:
- detect the runtime zswap enabled state,
- enable zswap when it is initially disabled,
- restore the original state after tests complete.
Skip the test when zswap state cannot be determined (e.g. unsupported or
unreadable), and keep existing behavior when zswap is already enabled.
This makes test_zswap more robust across systems where zswap is built but
disabled by default.
Signed-off-by: Li Wang <liwang@redhat.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Michal Koutný <mkoutny@suse.com>
Cc: Muchun Song <muchun.song@linux.dev>
Cc: Nhat Pham <nphamcs@gmail.com>
Cc: Tejun Heo <tj@kernel.org>
Cc: Roman Gushchin <roman.gushchin@linux.dev>
Cc: Shakeel Butt <shakeel.butt@linux.dev>
Cc: Yosry Ahmed <yosryahmed@google.com>
---
tools/testing/selftests/cgroup/test_zswap.c | 77 ++++++++++++++++++++-
1 file changed, 75 insertions(+), 2 deletions(-)
diff --git a/tools/testing/selftests/cgroup/test_zswap.c b/tools/testing/selftests/cgroup/test_zswap.c
index 64ebc3f3f203..1c80f4af9683 100644
--- a/tools/testing/selftests/cgroup/test_zswap.c
+++ b/tools/testing/selftests/cgroup/test_zswap.c
@@ -594,18 +594,88 @@ static bool zswap_configured(void)
return access("/sys/module/zswap", F_OK) == 0;
}
+static int zswap_enabled_state(void)
+{
+ char buf[16];
+ ssize_t n;
+
+ if (!zswap_configured())
+ return -1;
+
+ n = read_text("/sys/module/zswap/parameters/enabled", buf, sizeof(buf));
+ if (n < 0 || n == 0)
+ return -1;
+
+ switch (buf[0]) {
+ case 'Y':
+ case 'y':
+ case '1':
+ return 1;
+ case 'N':
+ case 'n':
+ case '0':
+ return 0;
+ default:
+ return -1;
+ }
+}
+
+static bool enable_zswap(void)
+{
+ int st;
+ char y[] = "Y\n";
+
+ st = zswap_enabled_state();
+ if (st == 1)
+ return true;
+ if (st < 0)
+ return false;
+
+ if (write_text("/sys/module/zswap/parameters/enabled", y, strlen(y)) >= 0) {
+ if (zswap_enabled_state() == 1)
+ return true;
+ }
+
+ ksft_print_msg("Failed to enable zswap\n");
+ return false;
+}
+
+static bool disable_zswap(void)
+{
+ int st;
+ char n[] = "N\n";
+
+ st = zswap_enabled_state();
+ if (st == 0)
+ return true;
+ if (st < 0)
+ return false;
+
+ if (write_text("/sys/module/zswap/parameters/enabled", n, strlen(n)) >= 0) {
+ if (zswap_enabled_state() == 0)
+ return true;
+ }
+
+ ksft_print_msg("Failed to disable zswap\n");
+ return false;
+}
+
int main(int argc, char **argv)
{
char root[PATH_MAX];
- int i;
+ int i, orig_zswap_state;
ksft_print_header();
ksft_set_plan(ARRAY_SIZE(tests));
if (cg_find_unified_root(root, sizeof(root), NULL))
ksft_exit_skip("cgroup v2 isn't mounted\n");
- if (!zswap_configured())
+ orig_zswap_state = zswap_enabled_state();
+
+ if (orig_zswap_state == -1)
ksft_exit_skip("zswap isn't configured\n");
+ else if (orig_zswap_state == 0 && !enable_zswap())
+ ksft_exit_skip("zswap is disabled and cannot be enabled\n");
/*
* Check that memory controller is available:
@@ -632,5 +702,8 @@ int main(int argc, char **argv)
}
}
+ if (orig_zswap_state == 0)
+ disable_zswap();
+
ksft_finished();
}
--
2.53.0
next reply other threads:[~2026-03-11 11:05 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-11 11:05 Li Wang [this message]
2026-03-11 11:05 ` [PATCH 2/5] selftests/cgroup: avoid OOM in test_swapin_nozswap Li Wang
2026-03-11 18:50 ` Yosry Ahmed
2026-03-12 4:01 ` Li Wang
2026-03-12 17:09 ` Nhat Pham
2026-03-13 2:59 ` Li Wang
2026-03-11 11:05 ` [PATCH 3/5] selftests/cgroup: use runtime page size for zswpin check Li Wang
2026-03-11 18:56 ` Yosry Ahmed
2026-03-12 2:35 ` Li Wang
2026-03-11 11:05 ` [PATCH 4/5] selftest/cgroup: fix zswap test_no_invasive_cgroup_shrink on 64K pagesize system Li Wang
2026-03-11 19:01 ` Yosry Ahmed
2026-03-12 2:36 ` Li Wang
2026-03-11 11:05 ` [PATCH 5/5] selftest/cgroup: fix zswap attempt_writeback() " Li Wang
2026-03-11 18:58 ` Yosry Ahmed
2026-03-12 2:38 ` Li Wang
2026-03-11 13:20 ` [PATCH 1/5] selftests/cgroup: detect and handle global zswap state in test_zswap Michal Koutný
2026-03-11 18:41 ` Yosry Ahmed
2026-03-11 18:47 ` Yosry Ahmed
2026-03-12 1:41 ` Li Wang
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=20260311110523.26624-1-liwang@redhat.com \
--to=liwang@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=hannes@cmpxchg.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=mhocko@kernel.org \
--cc=mkoutny@suse.com \
--cc=muchun.song@linux.dev \
--cc=nphamcs@gmail.com \
--cc=roman.gushchin@linux.dev \
--cc=shakeel.butt@linux.dev \
--cc=tj@kernel.org \
--cc=yosryahmed@google.com \
/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