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
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 = NULL;
        pid_t child_pid;
+       size_t stored_pages;
 
        /* Read sys info and compute test values accordingly */
        if (sysinfo(&sys_info) != 0)
                return KSFT_FAIL;
-       if (sys_info.totalram > 5000000000)
+       if (sys_info.totalram > 5000000000) {
+               ksft_print_msg("requires less than 5000000000 total ram\n");
                return KSFT_SKIP;
+       }
+       if (get_zswap_stored_pages(&stored_pages)) {
+               ksft_print_msg("debugfs at /sys/kernel/debug is required\n");
+               return KSFT_SKIP;
+       }
        values = mmap(0, sizeof(struct no_kmem_bypass_child_args), PROT_READ |
                        PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
        if (values == 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 = 0; i < 20; i++) {
-               size_t stored_pages;
                char *trigger_allocation = malloc(trigger_allocation_size);
 
                if (!trigger_allocation)
-- 
2.55.0.508.g3f0d502094-goog


Reply via email to