From: Sachin Sant <sachinp@linux.ibm.com>
To: linux-kselftest@vger.kernel.org
Cc: shuah@kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH] selftests/zram: add configurable compression algorithm support
Date: Thu, 16 Jul 2026 14:25:01 +0530 [thread overview]
Message-ID: <20260716085501.75522-1-sachinp@linux.ibm.com> (raw)
Allow the compression algorithm used by zram01.sh to be specified at
runtime rather than being hardcoded to 'lzo'.
- zram.sh: add -a <algorithm> option (default: lzo) and forward the
chosen algorithm to zram01.sh
- zram01.sh: accept the algorithm as a positional argument, falling
back to lzo when not provided
- zram_lib.sh: add zram_check_alg_support() helper that inspects
/sys/block/zramN/comp_algorithm and exits with ksft_skip when the
requested algorithm is not supported by the running kernel
This makes it straightforward to test non-default compressors (e.g.
zstd, 842) without modifying the test scripts.
Signed-off-by: Sachin Sant <sachinp@linux.ibm.com>
---
tools/testing/selftests/zram/README | 18 +++++++++++++++---
tools/testing/selftests/zram/zram.sh | 21 ++++++++++++++++++++-
tools/testing/selftests/zram/zram01.sh | 5 ++++-
tools/testing/selftests/zram/zram_lib.sh | 20 ++++++++++++++++++++
4 files changed, 59 insertions(+), 5 deletions(-)
diff --git a/tools/testing/selftests/zram/README b/tools/testing/selftests/zram/README
index 82921c75681c..e3a230afb8c7 100644
--- a/tools/testing/selftests/zram/README
+++ b/tools/testing/selftests/zram/README
@@ -18,11 +18,23 @@ CONFIG_ZSMALLOC=y
ZRAM Testcases
--------------
-zram_lib.sh: create library with initialization/cleanup functions
-zram.sh: For sanity check of CONFIG_ZRAM and to run zram01 and zram02
+zram_lib.sh: library with initialization/cleanup functions and helpers;
+ includes zram_check_alg_support() which verifies a requested
+ compression algorithm is available and exits with ksft_skip
+ when it is not.
+zram.sh: sanity check of CONFIG_ZRAM; runs zram01 and zram02.
+ Accepts an optional -a <algorithm> flag (default: lzo) to select
+ the compression algorithm forwarded to zram01.sh.
+ Usage: zram.sh [-a <algorithm>]
+ -a <algorithm> compression algorithm to test (default: lzo)
+ must be listed in /sys/block/zramN/comp_algorithm
+ -h show help message
Two functional tests: zram01 and zram02:
-zram01.sh: creates general purpose ram disks with ext4 filesystems
+zram01.sh: creates general purpose ram disks with ext4 filesystems.
+ Accepts the compression algorithm as an optional first positional
+ argument (default: lzo). Verifies kernel support for the
+ requested algorithm before running.
zram02.sh: creates block device for swap
Commands required for testing:
diff --git a/tools/testing/selftests/zram/zram.sh b/tools/testing/selftests/zram/zram.sh
index b0b91d9b0dc2..a8a32a184adb 100755
--- a/tools/testing/selftests/zram/zram.sh
+++ b/tools/testing/selftests/zram/zram.sh
@@ -4,11 +4,30 @@ TCID="zram.sh"
. ./zram_lib.sh
+usage()
+{
+ echo "Usage: $0 [-a <algorithm>]"
+ echo " -a <algorithm> compression algorithm to test (default: lzo)"
+ echo " must be listed in /sys/block/zramN/comp_algorithm"
+ echo " -h show this help message"
+}
+
+ZRAM_ALG="lzo"
+
+while getopts "a:h" opt; do
+ case "$opt" in
+ a) ZRAM_ALG="$OPTARG" ;;
+ h) usage; exit 0 ;;
+ *) echo "Unknown option: $opt" >&2; usage; exit 1 ;;
+ esac
+done
+shift $((OPTIND - 1))
+
run_zram () {
echo "--------------------"
echo "running zram tests"
echo "--------------------"
-./zram01.sh
+./zram01.sh "$ZRAM_ALG"
echo ""
./zram02.sh
}
diff --git a/tools/testing/selftests/zram/zram01.sh b/tools/testing/selftests/zram/zram01.sh
index 8f4affe34f3e..070cc4162384 100755
--- a/tools/testing/selftests/zram/zram01.sh
+++ b/tools/testing/selftests/zram/zram01.sh
@@ -29,7 +29,9 @@ zram_max_streams="2"
zram_sizes="2097152" # 2MB
zram_mem_limits="2M"
zram_filesystems="ext4"
-zram_algs="lzo"
+# Accept the compression algorithm as the first positional argument;
+# fall back to lzo when not provided.
+zram_algs="${1:-lzo}"
zram_fill_fs()
{
@@ -58,6 +60,7 @@ zram_fill_fs()
check_prereqs
zram_load
+zram_check_alg_support "$zram_algs" "$dev_start"
zram_max_streams
zram_compress_alg
zram_set_disksizes
diff --git a/tools/testing/selftests/zram/zram_lib.sh b/tools/testing/selftests/zram/zram_lib.sh
index 21ec1966de76..d3762b497f91 100755
--- a/tools/testing/selftests/zram/zram_lib.sh
+++ b/tools/testing/selftests/zram/zram_lib.sh
@@ -30,6 +30,26 @@ check_prereqs()
fi
}
+# zram_check_alg_support <alg> <dev_idx>
+# Verify <alg> appears in comp_algorithm of zram device <dev_idx>.
+# Must be called after zram_load so the device already exists.
+# Exits with ksft_skip if the algorithm is not supported by this kernel build.
+zram_check_alg_support()
+{
+ local alg=$1
+ local idx=$2
+
+ [ -z "$alg" ] && { echo "skip: no compression algorithm specified" >&2; \
+ zram_cleanup; exit $ksft_skip; }
+
+ if ! tr -d '[]' < /sys/block/zram${idx}/comp_algorithm 2>/dev/null \
+ | grep -qw "${alg}"; then
+ echo "skip: compression algorithm '$alg' is not available" >&2
+ zram_cleanup
+ exit $ksft_skip
+ fi
+}
+
kernel_gte()
{
major=${1%.*}
--
2.39.1
reply other threads:[~2026-07-16 8:55 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20260716085501.75522-1-sachinp@linux.ibm.com \
--to=sachinp@linux.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=shuah@kernel.org \
/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
Powered by JetHome