[PATCH v2 5/8] t/zbd: add -m option to enable write_zone_remainder option

Shin'ichiro Kawasaki
2026-02-16T08:00:49Z

The previous commit introduced the option write_zone_remainder. To
confirm the option works as expected, introduce the new option -m
to the test scripts test-zbd-support and run-tests-against-nullb.

Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
---
t/zbd/run-tests-against-nullb | 6 ++++++
t/zbd/test-zbd-support | 30 ++++++++++++++++++++++++++++++
2 files changed, 36 insertions(+)

diff --git a/t/zbd/run-tests-against-nullb b/t/zbd/run-tests-against-nullb
index f1cba355..628e41a3 100755
--- a/t/zbd/run-tests-against-nullb
+++ b/t/zbd/run-tests-against-nullb
@@ -23,6 +23,7 @@ usage()
echo -e "\t-o <max_open_zones> Specify MaxOpen value, (${set_max_open} by default)."
echo -e "\t-n <#number of runs> Set the number of times to run the entire suite "
echo -e "\t or an individual section/test."
+ echo -e "\t-m Pass -m option to test-zbd-support to enable write_zone_remainder."
echo -e "\t-q Quit t/zbd/test-zbd-support run after any failed test."
echo -e "\t-r Remove the /dev/nullb0 device that may still exist after"
echo -e "\t running this script."
@@ -426,6 +427,7 @@ dev_size=1024
dev_blocksize=4096
set_max_open=8
set_extra_max_active=2
+write_zone_remainder=0
zbd_test_opts=()
num_of_runs=1
test_case=0
@@ -438,6 +440,7 @@ while (($#)); do
-L) list_only=1; shift;;
-r) cleanup_nullb; exit 0;;
-n) num_of_runs="${2}"; shift; shift;;
+ -m) write_zone_remainder=1; shift;;
-t) test_case="${2}"; shift; shift;;
-q) quit_on_err=1; shift;;
-h) usage; break;;
@@ -491,6 +494,9 @@ while ((run_nr <= $num_of_runs)); do
if ((quit_on_err)); then
zbd_test_opts+=("-q")
fi
+ if ((write_zone_remainder)); then
+ zbd_test_opts+=("-m")
+ fi
section$section_number
configure_nullb
rc=$?
diff --git a/t/zbd/test-zbd-support b/t/zbd/test-zbd-support
index 40f1de90..01fb4dd3 100755
--- a/t/zbd/test-zbd-support
+++ b/t/zbd/test-zbd-support
@@ -13,6 +13,7 @@ usage() {
echo -e "\t-l Test with libzbc ioengine"
echo -e "\t-r Reset all zones before test start"
echo -e "\t-w Reset all zones before executing each write test case"
+ echo -e "\t-m Write zone remainder instead of zone finish operation"
echo -e "\t-o <max_open_zones> Run fio with max_open_zones limit"
echo -e "\t-t <test #> Run only a single test case with specified number"
echo -e "\t-s <test #> Start testing from the case with the specified number"
@@ -202,6 +203,30 @@ has_max_open_zones() {
return 1
}

+has_zone_writes() {
+ local has_zonemode_zbd=0
+ local has_write=0
+ local word
+
+ while (($# > 1)); do
+ if [[ ${1} =~ "--zonemode=zbd" ]]; then
+ has_zonemode_zbd=1
+ fi
+ if [[ ${1} =~ "--rw=" ]]; then
+ word=${1}
+ word=${word/--rw=/}
+ if [[ $word =~ w ]]; then
+ has_write=1
+ fi
+ fi
+ shift
+ done
+ if ((has_zonemode_zbd && has_write)); then
+ return 0
+ fi
+ return 1
+}
+
run_fio() {
local fio opts

@@ -215,6 +240,9 @@ run_fio() {
if [[ -n ${max_open_zones_opt} ]] && ! has_max_open_zones "${opts[@]}"; then
opts+=("--max_open_zones=${max_open_zones_opt}")
fi
+ if [[ -n ${write_zone_remainder} ]] && has_zone_writes "${opts[@]}"; then
+ opts+=("--write_zone_remainder=1")
+ fi
{ echo; echo "fio ${opts[*]}"; echo; } >>"${logfile}.${test_number}"

"${dynamic_analyzer[@]}" "$fio" "${opts[@]}"
@@ -1877,6 +1905,7 @@ reset_all_zones=
reset_before_write=
use_libzbc=
zbd_debug=
+write_zone_remainder=
max_open_zones_opt=
quit_on_err=
force_io_uring=
@@ -1892,6 +1921,7 @@ while [ "${1#-}" != "$1" ]; do
-l) use_libzbc=1; shift;;
-r) reset_all_zones=1; shift;;
-w) reset_before_write=1; shift;;
+ -m) write_zone_remainder=1; shift;;
-t) tests+=("$2"); shift; shift;;
-o) max_open_zones_opt="${2}"; shift; shift;;
-s) start_test=$2; shift; shift;;
--
2.49.0