On Sun, Mar 22, 2026 at 2:11 AM Li Wang <[email protected]> wrote: > > test_zswap currently only checks whether zswap is present by testing > /sys/module/zswap. This misses the runtime global state exposed in > /sys/module/zswap/parameters/enabled. > > When zswap is built/loaded but globally disabled, the zswap cgroup > selftests run in an invalid environment and may fail spuriously. > > Check the runtime enabled state before running the tests: > - skip if zswap is not configured, > - fail if the enabled knob cannot be read, > - skip if zswap is globally disabled. > > Also print a hint in the skip message on how to enable zswap. > > Signed-off-by: Li Wang <[email protected]> > Cc: Johannes Weiner <[email protected]> > Cc: Michal Hocko <[email protected]> > Cc: Michal Koutný <[email protected]> > Cc: Muchun Song <[email protected]> > Cc: Nhat Pham <[email protected]> > Cc: Tejun Heo <[email protected]> > Cc: Roman Gushchin <[email protected]> > Cc: Shakeel Butt <[email protected]> > Cc: Yosry Ahmed <[email protected]> > Acked-by: Yosry Ahmed <[email protected]> > --- > > Notes: > v4: > - No changes. > > v3: > - Replace tri-state zswap_enabled() with check_zswap_enabled() for > clearer flow. > - Move skip/fail decisions into the helper instead of branching in > main(). > - Make read failure reporting more explicit by naming > `/sys/module/zswap/parameters/enabled`. > - Keep skip hint for enabling zswap: > `echo 1 > /sys/module/zswap/parameters/enabled`. > > v2: > - remove enable/disable_zswap functions > - skip the test if zswap is not enabled > - reporting fail when zswap_enabled return -1 > > tools/testing/selftests/cgroup/test_zswap.c | 19 +++++++++++++++---- > 1 file changed, 15 insertions(+), 4 deletions(-) > > diff --git a/tools/testing/selftests/cgroup/test_zswap.c > b/tools/testing/selftests/cgroup/test_zswap.c > index 64ebc3f3f203..e69d845d3592 100644 > --- a/tools/testing/selftests/cgroup/test_zswap.c > +++ b/tools/testing/selftests/cgroup/test_zswap.c > @@ -589,9 +589,21 @@ struct zswap_test { > }; > #undef T > > -static bool zswap_configured(void) > +static void check_zswap_enabled(void) > { > - return access("/sys/module/zswap", F_OK) == 0; > + char value[2]; > + > + if (access("/sys/module/zswap", F_OK)) > + ksft_exit_skip("zswap isn't configured\n"); > + > + if (read_text("/sys/module/zswap/parameters/enabled", value, > + sizeof(value)) <= 0) > + ksft_exit_fail_msg("Failed to read " > + "/sys/module/zswap/parameters/enabled\n"); > + > + if (value[0] == 'N') > + ksft_exit_skip("zswap is disabled (hint: echo 1 > " > + "/sys/module/zswap/parameters/enabled)\n"); > } > > int main(int argc, char **argv) > @@ -604,8 +616,7 @@ int main(int argc, char **argv) > if (cg_find_unified_root(root, sizeof(root), NULL)) > ksft_exit_skip("cgroup v2 isn't mounted\n"); > > - if (!zswap_configured()) > - ksft_exit_skip("zswap isn't configured\n"); > + check_zswap_enabled(); > > /* > * Check that memory controller is available: > -- > 2.53.0 >
LGTM with Yosry's suggestion. If there's no other change you can also submit a fixlet I guess? With that: Acked-by: Nhat Pham <[email protected]>

