Re: [PATCH] selftests/cgroup: test_zswap: skip test_no_kmem_bypass if debugfs is unavailable

Yosry Ahmed <[email protected]> Mon, 3 Aug 2026 10:31:39 -0700
Newsgroups org.kernel.vger.cgroups,org.kernel.vger.linux-kselftest,org.kvack.linux-mm
Message-ID <CAO9r8zMRqS4JfqMPVc6GEDUFEVh0iGJ-aJ1Qkyc6HsZrX-5fqw@mail.gmail.com>
On Fri, Jul 31, 2026 at 9:13=E2=80=AFPM Wilson Felipe Pereira
<[email protected]> wrote:
>
> test_no_kmem_bypass() needs to read
> /sys/kernel/debug/zswap/stored_pages via get_zswap_stored_pages() to
> verify that compressed pages are charged to the memcg.
>
> When running in an environment where debugfs is not mounted or
> CONFIG_DEBUG_FS is disabled, get_zswap_stored_pages() fails, causing the
> loop to terminate early and report a false negative (KSFT_FAIL).
>
> Selftests should not fail when if debugfs is unavailable, and it

Nit: I think either "when" or "if" here :)

> should print a message when it is skipped.
>
> Signed-off-by: Wilson Felipe Pereira <[email protected]>
> ---
>  tools/testing/selftests/cgroup/test_zswap.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/tools/testing/selftests/cgroup/test_zswap.c b/tools/testing/=
selftests/cgroup/test_zswap.c
> index 49b36ee791606..c4f7b66f1b206 100644
> --- a/tools/testing/selftests/cgroup/test_zswap.c
> +++ b/tools/testing/selftests/cgroup/test_zswap.c
> @@ -566,12 +566,19 @@ static int test_no_kmem_bypass(const char *root)
>         int child_status;
>         char *test_group =3D NULL;
>         pid_t child_pid;
> +       size_t stored_pages;
>
>         /* Read sys info and compute test values accordingly */
>         if (sysinfo(&sys_info) !=3D 0)
>                 return KSFT_FAIL;
> -       if (sys_info.totalram > 5000000000)
> +       if (sys_info.totalram > 5000000000) {
> +               ksft_print_msg("requires less than 5000000000 total ram\n=
");

The message is hard to parse, we should probably write 5G instead of
5000000000, and probably change 5000000000 to the actual number for
5G, 5368709120. I would write it as (5 << 30), MB(5 * 1024), or add
GB() to tools/testing/selftests/cgroup/lib/include/cgroup_util.h. It
might also help to print sys_info.totalram as well (in MB or GB).

Also, the comment above the function says 4G while this checks for 5G,
so maybe change this to 4G while at it (or update the comment).

>                 return KSFT_SKIP;
> +       }
> +       if (get_zswap_stored_pages(&stored_pages)) {
> +               ksft_print_msg("debugfs at /sys/kernel/debug is required\=
n");

IIUC get_zswap_stored_pages() can fail for other reasons, at least
theoretically, than debugfs not being mounted. Should we explicitly
check for the existence of sys/kernel/debug/zswap/stored_pages
instead?

> +               return KSFT_SKIP;
> +       }
>         values =3D mmap(0, sizeof(struct no_kmem_bypass_child_args), PROT=
_READ |
>                         PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
>         if (values =3D=3D MAP_FAILED)
> @@ -604,7 +611,6 @@ static int test_no_kmem_bypass(const char *root)
>         /* Try to wakeup kswapd and let it push child memory to zswap */
>         set_min_free_kb(min_free_kb_high);
>         for (int i =3D 0; i < 20; i++) {
> -               size_t stored_pages;
>                 char *trigger_allocation =3D malloc(trigger_allocation_si=
ze);
>
>                 if (!trigger_allocation)
> --
> 2.55.0.508.g3f0d502094-goog
>