Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package blktests for openSUSE:Factory checked in at 2026-06-25 17:13:28 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/blktests (Old) and /work/SRC/openSUSE:Factory/.blktests.new.2088 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "blktests" Thu Jun 25 17:13:28 2026 rev:14 rq:1361691 version:0+20260623.5a62429 Changes: -------- --- /work/SRC/openSUSE:Factory/blktests/blktests.changes 2026-04-25 21:37:23.357816241 +0200 +++ /work/SRC/openSUSE:Factory/.blktests.new.2088/blktests.changes 2026-06-25 17:13:30.217740903 +0200 @@ -1,0 +2,30 @@ +Wed Jun 25 00:00:00 UTC 2026 - Sebastian Chlad <[email protected]> + +- Use %autosetup -p1 instead of explicit %setup + %patch + +------------------------------------------------------------------- +Tue Jun 23 19:06:02 UTC 2026 - Sebastian Chlad <[email protected]> + +- Add 0001-tests-md-allow-overriding-minimum-kernel-version-via.patch + to allow overriding the minimum kernel version for md tests via + BLKTESTS_MD_KVER environment variable, to support distro kernels + with backported atomic write support + +------------------------------------------------------------------- +Tue Jun 23 04:32:35 UTC 2026 - Sebastian Chlad <[email protected]> + +- Update to version 0+20260623.5a62429: + * scsi/009: fix unset bytes_to_write in TEST 8 + * ublk: mark all tests as QUICK + * throtl/008: Add a test for the iocost cgroup controller + * nvme/059: fix unset bytes_to_write in TEST 7 + * common/nvme, nvme/rc: use _set_attr() to trace attribute writes + * common/rc: add _set_attr() function to trace attribute writes + * check: add --cmd-trace option + * nbd/rc: redirect nbd-server stderr + * nvme/064, src/nvme-passthrough-meta.c: test a large metadata_len + * nvme/068: add a test for multipath delayed removal + * loop: add regression test for partscan double-scan race + * throtl/{002,003,007}, zbd/014: use _get_page_size to get PAGE_SIZE + +------------------------------------------------------------------- Old: ---- blktests-0+20260416.1d68a36.tar.xz New: ---- 0001-tests-md-allow-overriding-minimum-kernel-version-via.patch blktests-0+20260623.5a62429.tar.xz ----------(New B)---------- New: - Add 0001-tests-md-allow-overriding-minimum-kernel-version-via.patch to allow overriding the minimum kernel version for md tests via ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ blktests.spec ++++++ --- /var/tmp/diff_new_pack.Pt54r6/_old 2026-06-25 17:13:31.429782709 +0200 +++ /var/tmp/diff_new_pack.Pt54r6/_new 2026-06-25 17:13:31.429782709 +0200 @@ -17,12 +17,13 @@ Name: blktests -Version: 0+20260416.1d68a36 +Version: 0+20260623.5a62429 Release: 0 Summary: Linux kernel block layer testing framework License: GPL-2.0-or-later URL: https://github.com/osandov/blktests Source: %{name}-%{version}.tar.xz +Patch0: 0001-tests-md-allow-overriding-minimum-kernel-version-via.patch BuildRequires: gcc-c++ %if 0%{?suse_version} > 1500 BuildRequires: liburing-devel >= 2.2 @@ -44,7 +45,7 @@ framework. %prep -%autosetup +%autosetup -p1 %build %make_build ++++++ 0001-tests-md-allow-overriding-minimum-kernel-version-via.patch ++++++ >From 12ce6458f01d97ed2070c0d6a415f5d634b5dd53 Mon Sep 17 00:00:00 2001 From: Sebastian Chlad <[email protected]> Date: Tue, 23 Jun 2026 19:06:02 +0200 Subject: [PATCH] tests/md: allow overriding minimum kernel version via BLKTESTS_MD_KVER The _stacked_atomic_test_requires() function hard-codes a minimum kernel version of 6.14.0. This is too strict for distros that backport atomic write support to older kernels (e.g. 6.12-based SLES kernels). Allow the required version to be overridden via BLKTESTS_MD_KVER so that the tests can run on such kernels: BLKTESTS_MD_KVER="6 12 0" ./check tests/md/ When unset the default of 6 14 0 is preserved. --- tests/md/rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/md/rc b/tests/md/rc index efbc234..3f9d442 100644 --- a/tests/md/rc +++ b/tests/md/rc @@ -14,7 +14,7 @@ group_requires() { } _stacked_atomic_test_requires() { - _have_kver 6 14 0 + _have_kver ${BLKTESTS_MD_KVER:-6 14 0} _have_xfs_io_atomic_write _have_driver raid0 _have_driver raid1 -- 2.51.0 ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.Pt54r6/_old 2026-06-25 17:13:31.489784778 +0200 +++ /var/tmp/diff_new_pack.Pt54r6/_new 2026-06-25 17:13:31.493784916 +0200 @@ -3,6 +3,6 @@ <param name="url">git://github.com/osandov/blktests</param> <param name="changesrevision">e10add032819db8f3abf0a9d53f160b7b10cfed8</param></service><service name="tar_scm"> <param name="url">https://github.com/osandov/blktests.git</param> - <param name="changesrevision">1d68a36e77ef59da81887b1052cee2668aebe41a</param></service></servicedata> + <param name="changesrevision">5a62429536b11c813b5fbbb8165066709bcee002</param></service></servicedata> (No newline at EOF) ++++++ blktests-0+20260416.1d68a36.tar.xz -> blktests-0+20260623.5a62429.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/.github/workflows/ci.yml new/blktests-0+20260623.5a62429/.github/workflows/ci.yml --- old/blktests-0+20260416.1d68a36/.github/workflows/ci.yml 2026-04-16 09:22:38.000000000 +0200 +++ new/blktests-0+20260623.5a62429/.github/workflows/ci.yml 2026-06-22 23:29:10.000000000 +0200 @@ -10,7 +10,7 @@ compiler: [gcc, clang] arch: [x86_64, x86] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@main - name: Install multilib run: | sudo apt-get update @@ -28,7 +28,7 @@ check: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@main - name: Install ShellCheck run: | curl -L "https://github.com/koalaman/shellcheck/releases/download/stable/shellcheck-stable.linux.x86_64.tar.xz" | tar -xJ shellcheck-stable/shellcheck diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/check new/blktests-0+20260623.5a62429/check --- old/blktests-0+20260416.1d68a36/check 2026-04-16 09:22:38.000000000 +0200 +++ new/blktests-0+20260623.5a62429/check 2026-06-22 23:29:10.000000000 +0200 @@ -458,7 +458,17 @@ TIMEFORMAT="%Rs" pushd . >/dev/null || return + if ((CMD_TRACE)); then + exec 8>"${seqres}.cmdtrace" + export BASH_XTRACEFD=8 + set -x + fi { time "$test_func" >"${seqres}.out" 2>&1; } 2>"${seqres}.runtime" + if ((CMD_TRACE)); then + set +x + unset BASH_XTRACEFD + exec 8>&- + fi TEST_RUN["exit_status"]=$? popd >/dev/null || return TEST_RUN["runtime"]="$(cat "${seqres}.runtime")" @@ -1157,7 +1167,7 @@ _check_dependencies -if ! TEMP=$(getopt -o 'do:q::x:c:h' --long 'device-only,quick::,exclude:,output:,config:,help' -n "$0" -- "$@"); then +if ! TEMP=$(getopt -o 'do:q::x:c:th' --long 'device-only,quick::,exclude:,output:,config:,cmd-trace,help' -n "$0" -- "$@"); then exit 1 fi @@ -1165,6 +1175,7 @@ unset TEMP LOADED_CONFIG=0 +CMD_TRACE=0 OPTION_EXCLUDE=() while true; do case "$1" in @@ -1192,6 +1203,10 @@ LOADED_CONFIG=1 shift 2 ;; + '-t'|'--cmd-trace') + CMD_TRACE=1 + shift + ;; '-h'|'--help') usage out ;; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/common/nvme new/blktests-0+20260623.5a62429/common/nvme --- old/blktests-0+20260416.1d68a36/common/nvme 2026-04-16 09:22:38.000000000 +0200 +++ new/blktests-0+20260623.5a62429/common/nvme 2026-06-22 23:29:10.000000000 +0200 @@ -268,6 +268,38 @@ nvme disconnect --device "${ctrl}" } +_nvme_disconnect_ctrl_sync() { + local ctrl="$1" + local subsysnqn="$2" + + _nvme_disconnect_ctrl "${ctrl}" + + for ((i = 0; i < 10; i++)); do + _nvme_ctrl_ready "${ctrl}" "${subsysnqn}" + if [[ $? -eq 1 ]]; then + break + fi + sleep .1 + done +} + +_nvme_wait_subsys_removed() { + local subsysnqn="$def_subsysnqn" + + for subsyspath in /sys/class/nvme-subsystem/*; do + _subsysnqn=$(cat "${subsyspath}/subsysnqn" 2> /dev/null) + if [ "$subsysnqn" == "$_subsysnqn" ]; then + for ((i = 0; i < 10; i++)); do + if [ ! -d "$subsyspath" ]; then + break + fi + sleep .1 + done + break + fi + done +} + _nvme_connect_subsys() { local subsysnqn="$def_subsysnqn" local hostnqn="$def_hostnqn" @@ -570,18 +602,18 @@ traddr=$(_fc_traddr $port) adrfam="fc" fi - echo "${trtype}" > "${portcfs}/addr_trtype" - echo "${traddr}" > "${portcfs}/addr_traddr" - echo "${adrfam}" > "${portcfs}/addr_adrfam" + _set_attr "${trtype}" "${portcfs}/addr_trtype" + _set_attr "${traddr}" "${portcfs}/addr_traddr" + _set_attr "${adrfam}" "${portcfs}/addr_adrfam" if [[ "${adrfam}" != "fc" ]] && \ [[ "${adrfam}" != "loop" ]] ; then - echo "${trsvcid}" > "${portcfs}/addr_trsvcid" + _set_attr "${trsvcid}" "${portcfs}/addr_trsvcid" fi if [[ "${trtype}" == "tcp" ]] && \ [[ "${tls}" != "none" ]]; then - echo "tls1.3" > "${portcfs}/addr_tsas" + _set_attr "tls1.3" "${portcfs}/addr_tsas" if [[ "${tls}" != "required" ]]; then - echo "not required" > "${portcfs}/addr_treq" + _set_attr "not required" "${portcfs}/addr_treq" fi fi echo "${port}" @@ -601,7 +633,7 @@ fi mkdir "${anaport}" fi - echo "${anastate}" > "${anaport}/ana_state" + _set_attr "${anastate}" "${anaport}/ana_state" } _remove_nvmet_port() { @@ -722,19 +754,19 @@ subsys_path="${NVMET_CFS}/subsystems/${subsysnqn}" ns_path="${subsys_path}/namespaces/${nsid}" mkdir "${ns_path}" - printf "%s" "${blkdev}" > "${ns_path}/device_path" + _set_attr "$(printf "%s" "${blkdev}")" "${ns_path}/device_path" if [[ -f "${ns_path}/resv_enable" && "${resv_enable}" = true ]] ; then - printf 1 > "${ns_path}/resv_enable" + _set_attr 1 "${ns_path}/resv_enable" fi if [[ -n "${uuid}" ]]; then - printf "%s" "${uuid}" > "${ns_path}/device_uuid" + _set_attr "$(printf "%s" "${uuid}")" "${ns_path}/device_uuid" else uuid=$(cat "${ns_path}/device_uuid") fi if (( grpid != 1 )); then - printf "%d" "${grpid}" > "${ns_path}/ana_grpid" + _set_attr "$(printf "%d" "${grpid}")" "${ns_path}/ana_grpid" fi - printf 1 > "${ns_path}/enable" + _set_attr 1 "${ns_path}/enable" echo "${uuid}" } @@ -748,7 +780,7 @@ if [[ ! -d "${ns_path}" ]]; then return fi - echo "${anagrpid}" > "${ns_path}/anagrpid" + _set_attr "${anagrpid}" "${ns_path}/anagrpid" } _create_nvmet_subsystem() { @@ -786,7 +818,7 @@ cfs_path="${NVMET_CFS}/subsystems/${subsystem}" mkdir -p "${cfs_path}" - echo 0 > "${cfs_path}/attr_allow_any_host" + _set_attr 0 "${cfs_path}/attr_allow_any_host" if [[ -z "${blkdev}" ]]; then return 0 fi @@ -825,10 +857,10 @@ mkdir "${host_path}" _add_nvmet_allow_hosts "${nvmet_subsystem}" "${nvmet_hostnqn}" if [[ "${nvmet_hostkey}" ]] ; then - echo "${nvmet_hostkey}" > "${host_path}/dhchap_key" + _set_attr "${nvmet_hostkey}" "${host_path}/dhchap_key" fi if [[ "${nvmet_ctrlkey}" ]] ; then - echo "${nvmet_ctrlkey}" > "${host_path}/dhchap_ctrl_key" + _set_attr "${nvmet_ctrlkey}" "${host_path}/dhchap_ctrl_key" fi } @@ -838,7 +870,7 @@ local subsys_path="${NVMET_CFS}/subsystems/${nvmet_subsystem}" local nvmet_ns_path="${subsys_path}/namespaces/${nsid}" - echo 0 > "${nvmet_ns_path}/enable" + _set_attr 0 "${nvmet_ns_path}/enable" rmdir "${nvmet_ns_path}" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/common/rc new/blktests-0+20260623.5a62429/common/rc --- old/blktests-0+20260416.1d68a36/common/rc 2026-04-16 09:22:38.000000000 +0200 +++ new/blktests-0+20260623.5a62429/common/rc 2026-06-22 23:29:10.000000000 +0200 @@ -117,6 +117,16 @@ fi } +_module_use_count() { + local refcnt + if [ -f "/sys/module/$1/refcnt" ]; then + refcnt="$(cat /sys/module/"$1"/refcnt)" + echo "$refcnt" + return + fi + echo "" +} + _have_module_param() { _have_driver "$1" || return @@ -628,6 +638,22 @@ return 0 } +_have_systemd_ver() { + local required_ver=${1} + local ver + + if ! command -v systemctl &>/dev/null; then + SKIP_REASONS+=("systemd is not available") + return 1 + fi + + ver=$(systemctl --version | head -1 | sed 's/systemd //;s/[^0-9].*//') + if ((ver < required_ver)); then + SKIP_REASONS+=("systemd version is older than ${required_ver}") + return 1 + fi +} + # Run the given command as NORMAL_USER _run_user() { su "$NORMAL_USER" -c "$1" @@ -764,3 +790,10 @@ done echo "$ret" } + +# Write a value to a sysfs/debugfs/configfs attribute. This wrapper is used to +# trace sysfs/debugfs/configfs attribute writes when the --cmd-trace option is +# enabled. +_set_attr() { + echo -n "$1" > "$2" +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/src/nvme-passthrough-meta.c new/blktests-0+20260623.5a62429/src/nvme-passthrough-meta.c --- old/blktests-0+20260416.1d68a36/src/nvme-passthrough-meta.c 2026-04-16 09:22:38.000000000 +0200 +++ new/blktests-0+20260623.5a62429/src/nvme-passthrough-meta.c 2026-06-22 23:29:10.000000000 +0200 @@ -228,5 +228,13 @@ return EFAULT; } + cmd.opcode = 1; + cmd.metadata_len = 4096 * 20; + ret = ioctl(fd, NVME_IOCTL_IO_CMD, &cmd); + if (ret == 0) { + perror("nvme-write (large metadata_len)"); + return EFAULT; + } + return 0; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/tests/loop/012 new/blktests-0+20260623.5a62429/tests/loop/012 --- old/blktests-0+20260416.1d68a36/tests/loop/012 1970-01-01 01:00:00.000000000 +0100 +++ new/blktests-0+20260623.5a62429/tests/loop/012 2026-06-22 23:29:10.000000000 +0200 @@ -0,0 +1,77 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-3.0+ +# Copyright (C) 2026 Daan De Meyer +# +# Regression test for a race between udev and loop_reread_partitions(). +# +# When LOOP_CONFIGURE is called with LO_FLAGS_PARTSCAN, +# disk_force_media_change() used to set GD_NEED_PART_SCAN before the +# uevent was sent. When udev opened the device in response, +# blkdev_get_whole() would trigger a partition scan, and then +# loop_reread_partitions() would scan again. The second scan drops all +# partitions from the first scan before re-adding them, causing +# partition devices to briefly disappear. +# +# Verify that setting up a loop device with partscan does not produce +# spurious partition add/remove events. + +. tests/loop/rc + +DESCRIPTION="check for spurious partition removal when partscan is enabled" +TIMED=1 + +requires() { + _have_program sfdisk + _have_systemd_ver 259 +} + +test() { + echo "Running ${TEST_NAME}" + + truncate -s 3MiB "$TMPDIR/img" + sfdisk "$TMPDIR/img" >"$FULL" 2>&1 <<-EOF + label: gpt + size=1MiB + EOF + + local dev + dev="$(losetup -f)" + + # Monitor kernel uevents for partition block devices. + udevadm monitor --kernel -s block/partition >"$TMPDIR/uevents" 2>&1 & + local mon_pid=$! + # Give the monitor time to set up its netlink socket. + sleep 0.5 + + local iterations=0 + SECONDS=0 + while ((SECONDS < "${TIMEOUT:-5}")); do + if ! losetup -P "$dev" "$TMPDIR/img" 2>>"$FULL"; then + continue + fi + losetup -d "$dev" 2>>"$FULL" + ((iterations++)) + done + + sleep 0.5 + kill "$mon_pid" + wait "$mon_pid" 2>/dev/null + + # Each setup+teardown cycle should produce exactly one add and one + # remove kernel uevent for the partition device. If the race + # triggers, a second partition scan produces an extra remove+add + # pair, inflating the counts beyond the number of iterations. + local name="${dev##*/}" + local adds removes + adds=$(grep -c "^KERNEL\[.*\] add.*${name}p" "$TMPDIR/uevents") + removes=$(grep -c "^KERNEL\[.*\] remove.*${name}p" "$TMPDIR/uevents") + + if ((adds > iterations)); then + echo "Fail: $iterations iterations but $adds add events (expected $iterations)" + fi + if ((removes > iterations)); then + echo "Fail: $iterations iterations but $removes remove events (expected $iterations)" + fi + + echo "Test complete" +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/tests/loop/012.out new/blktests-0+20260623.5a62429/tests/loop/012.out --- old/blktests-0+20260416.1d68a36/tests/loop/012.out 1970-01-01 01:00:00.000000000 +0100 +++ new/blktests-0+20260623.5a62429/tests/loop/012.out 2026-06-22 23:29:10.000000000 +0200 @@ -0,0 +1,2 @@ +Running loop/012 +Test complete diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/tests/nbd/rc new/blktests-0+20260623.5a62429/tests/nbd/rc --- old/blktests-0+20260416.1d68a36/tests/nbd/rc 2026-04-16 09:22:38.000000000 +0200 +++ new/blktests-0+20260623.5a62429/tests/nbd/rc 2026-06-22 23:29:10.000000000 +0200 @@ -72,7 +72,7 @@ [export] exportname=${TMPDIR}/export EOF - nbd-server -p "${TMPDIR}/nbd.pid" -C "${TMPDIR}/nbd.conf" + nbd-server -p "${TMPDIR}/nbd.pid" -C "${TMPDIR}/nbd.conf" 2> "$FULL" # Wait for nbd-server start listening the port for ((i = 0; i < 100; i++)); do diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/tests/nvme/059 new/blktests-0+20260623.5a62429/tests/nvme/059 --- old/blktests-0+20260416.1d68a36/tests/nvme/059 2026-04-16 09:22:38.000000000 +0200 +++ new/blktests-0+20260623.5a62429/tests/nvme/059 2026-06-22 23:29:10.000000000 +0200 @@ -134,6 +134,7 @@ test_desc="TEST 7 - perform a pwritev2 with size of sysfs_atomic_unit_max_bytes + logical " test_desc+="block with RWF_ATOMIC flag - pwritev2 should not be successful" + bytes_to_write=$(( sysfs_atomic_unit_max_bytes + sysfs_logical_block_size )) bytes_written=$(run_xfs_io_pwritev2_atomic /dev/"$ns_dev" "$bytes_to_write") if [ "$bytes_written" = "" ] then diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/tests/nvme/059.out new/blktests-0+20260623.5a62429/tests/nvme/059.out --- old/blktests-0+20260416.1d68a36/tests/nvme/059.out 2026-04-16 09:22:38.000000000 +0200 +++ new/blktests-0+20260623.5a62429/tests/nvme/059.out 2026-06-22 23:29:10.000000000 +0200 @@ -5,5 +5,6 @@ TEST 4 - Verify statx is correctly reporting atomic_unit_min_bytes - pass TEST 5 - perform a pwritev2 with size of sysfs_atomic_unit_min_bytes with RWF_ATOMIC flag - pwritev2 should be successful - pass TEST 6 - perform a pwritev2 with size of sysfs_atomic_unit_max_bytes with RWF_ATOMIC flag - pwritev2 should be successful - pass +pwrite: Invalid argument TEST 7 - perform a pwritev2 with size of sysfs_atomic_unit_max_bytes + logical block with RWF_ATOMIC flag - pwritev2 should not be successful - pass Test complete diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/tests/nvme/068 new/blktests-0+20260623.5a62429/tests/nvme/068 --- old/blktests-0+20260416.1d68a36/tests/nvme/068 1970-01-01 01:00:00.000000000 +0100 +++ new/blktests-0+20260623.5a62429/tests/nvme/068 2026-06-22 23:29:10.000000000 +0200 @@ -0,0 +1,113 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-3.0+ +# Copyright (C) 2026 John Garry +# +# Test NVMe multipath delayed removal works as expected. This feature was +# introduced in commit 62188639ec16 ("nvme-multipath: introduce delayed removal +# of the multipath head node") + +. tests/nvme/rc +. common/xfs + +DESCRIPTION="NVMe multipath delayed removal test" + +requires() { + _nvme_requires + _have_loop + _have_module_param_value nvme_core multipath Y + _require_nvme_trtype_is_fabrics +} + +set_conditions() { + _set_nvme_trtype "$@" +} + +_delayed_nvme_reconnect_ctrl() { + sleep 1 + _nvme_connect_subsys +} + +test() { + echo "Running ${TEST_NAME}" + + _setup_nvmet + + local nvmedev + local ns + local bytes_written + local refcnt_orig + local refcnt + _nvmet_target_setup + + _nvme_connect_subsys + + # Part a: Prove that writes fail when no path returns. Any reads or + # writes are queued during the delayed removal period. If no + # paths return before the timer expires, then those IOs should + # fail. + # During the delayed removal period, ensure that the module + # refcnt is incremented, to prove that we cannot remove the + # driver during this period. + nvmedev=$(_find_nvme_dev "${def_subsysnqn}") + ns=$(_find_nvme_ns "${def_subsys_uuid}") + refcnt_orig=$(_module_use_count nvme_core) + echo 5 > "/sys/block/${ns}/delayed_removal_secs" + _nvme_disconnect_ctrl_sync "${nvmedev}" "${def_subsysnqn}" + ns=$(_find_nvme_ns "${def_subsys_uuid}") + if [[ "${ns}" = "" ]]; then + echo "could not find ns after disconnect" + fi + refcnt=$(_module_use_count nvme_core) + if [ "$refcnt" != "" ] && [ "$refcnt" -le "$refcnt_orig" ]; then + echo "module refcount did not increase" + fi + bytes_written=$(run_xfs_io_pwritev2 /dev/"$ns" 4096) + if [ "$bytes_written" == 4096 ]; then + echo "wrote successfully after disconnect" + fi + _nvme_wait_subsys_removed + ns=$(_find_nvme_ns "${def_subsys_uuid}") + if [[ ! "${ns}" = "" ]]; then + echo "found ns after delayed removal" + fi + refcnt=$(_module_use_count nvme_core) + if [ "$refcnt" != "" ] && [ "$refcnt" -ne "$refcnt_orig" ]; then + echo "module refcount not as original" + fi + + # Part b: Ensure writes for an intermittent disconnect are successful. + # During an intermittent disconnect, any reads or writes + # queued should succeed after a path returns. + # Also ensure module refcount behaviour is as expected, as + # above. + _nvme_connect_subsys + nvmedev=$(_find_nvme_dev "${def_subsysnqn}") + ns=$(_find_nvme_ns "${def_subsys_uuid}") + refcnt_orig=$(_module_use_count nvme_core) + echo 5 > "/sys/block/${ns}/delayed_removal_secs" + _nvme_disconnect_ctrl_sync "${nvmedev}" "${def_subsysnqn}" + ns=$(_find_nvme_ns "${def_subsys_uuid}") + if [[ "${ns}" = "" ]]; then + echo "could not find ns after disconnect" + fi + _delayed_nvme_reconnect_ctrl "${nvmedev}" & + bytes_written=$(run_xfs_io_pwritev2 /dev/"$ns" 4096) + if [ "$bytes_written" != 4096 ]; then + echo "could not write successfully with reconnect" + fi + if ! _nvmf_wait_for_state "${def_subsysnqn}" "live" ; then + echo "subsystem did not return" + fi + refcnt=$(_module_use_count nvme_core) + if [ "$refcnt" != "" ] && [ "$refcnt" -ne "$refcnt_orig" ]; then + echo "module refcount not as original" + fi + + # Final tidy-up + echo 0 > "/sys/block/${ns}/delayed_removal_secs" + nvmedev=$(_find_nvme_dev "${def_subsysnqn}") + _nvme_disconnect_ctrl "${nvmedev}" + _nvmet_target_cleanup + + echo "Test complete" +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/tests/nvme/068.out new/blktests-0+20260623.5a62429/tests/nvme/068.out --- old/blktests-0+20260416.1d68a36/tests/nvme/068.out 1970-01-01 01:00:00.000000000 +0100 +++ new/blktests-0+20260623.5a62429/tests/nvme/068.out 2026-06-22 23:29:10.000000000 +0200 @@ -0,0 +1,3 @@ +Running nvme/068 +pwrite: Input/output error +Test complete diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/tests/nvme/rc new/blktests-0+20260623.5a62429/tests/nvme/rc --- old/blktests-0+20260416.1d68a36/tests/nvme/rc 2026-04-16 09:22:38.000000000 +0200 +++ new/blktests-0+20260623.5a62429/tests/nvme/rc 2026-06-22 23:29:10.000000000 +0200 @@ -223,12 +223,12 @@ local passthru_path="${subsys_path}/passthru" mkdir -p "${subsys_path}" - echo 0 > "${subsys_path}/attr_allow_any_host" + _set_attr 0 "${subsys_path}/attr_allow_any_host" _test_dev_nvme_ctrl > "${passthru_path}/device_path" - echo 1 > "${passthru_path}/enable" + _set_attr 1 "${passthru_path}/enable" if [[ -f "${passthru_path}/clear_ids" ]]; then - echo 1 > "${passthru_path}/clear_ids" + _set_attr 1 "${passthru_path}/clear_ids" fi } @@ -237,7 +237,7 @@ local subsys_path="${NVMET_CFS}/subsystems/${nvmet_subsystem}" local passthru_path="${subsys_path}/passthru" - echo 0 > "${passthru_path}/enable" + _set_attr 0 "${passthru_path}/enable" rm -f "${subsys_path}"/allowed_hosts/* rmdir "${subsys_path}" } @@ -247,8 +247,7 @@ local nvmet_hostkey="$2" local cfs_path="${NVMET_CFS}/hosts/${nvmet_hostnqn}" - echo "${nvmet_hostkey}" > \ - "${cfs_path}/dhchap_key" + _set_attr "${nvmet_hostkey}" "${cfs_path}/dhchap_key" } _set_nvmet_ctrlkey() { @@ -256,8 +255,7 @@ local nvmet_ctrlkey="$2" local cfs_path="${NVMET_CFS}/hosts/${nvmet_hostnqn}" - echo "${nvmet_ctrlkey}" > \ - "${cfs_path}/dhchap_ctrl_key" + _set_attr "${nvmet_ctrlkey}" "${cfs_path}/dhchap_ctrl_key" } _set_nvmet_hash() { @@ -265,8 +263,7 @@ local nvmet_hash="$2" local cfs_path="${NVMET_CFS}/hosts/${nvmet_hostnqn}" - echo "${nvmet_hash}" > \ - "${cfs_path}/dhchap_hash" + _set_attr "${nvmet_hash}" "${cfs_path}/dhchap_hash" } _set_nvmet_dhgroup() { @@ -274,8 +271,7 @@ local nvmet_dhgroup="$2" local cfs_path="${NVMET_CFS}/hosts/${nvmet_hostnqn}" - echo "${nvmet_dhgroup}" > \ - "${cfs_path}/dhchap_dhgroup" + _set_attr "${nvmet_dhgroup}" "${cfs_path}/dhchap_dhgroup" } _enable_nvmet_ns() { @@ -285,7 +281,7 @@ cfs_path="${NVMET_CFS}/subsystems/${subsysnqn}" ns_path="${cfs_path}/namespaces/${nsid}" - echo 1 > "${ns_path}/enable" + _set_attr 1 "${ns_path}/enable" } _disable_nvmet_ns() { @@ -295,7 +291,7 @@ cfs_path="${NVMET_CFS}/subsystems/${subsysnqn}" ns_path="${cfs_path}/namespaces/${nsid}" - echo 0 > "${ns_path}/enable" + _set_attr 0 "${ns_path}/enable" } _set_nvmet_ns_uuid() { @@ -473,8 +469,10 @@ _nvme_passthru_logging_cleanup() { - echo "$ctrl_dev_passthru_logging" > /sys/class/nvme/"$2"/passthru_err_log_enabled - echo "$ns_dev_passthru_logging" > /sys/class/nvme/"$2"/"$1"/passthru_err_log_enabled + _set_attr "$ctrl_dev_passthru_logging" \ + /sys/class/nvme/"$2"/passthru_err_log_enabled + _set_attr "$ns_dev_passthru_logging" \ + /sys/class/nvme/"$2"/"$1"/passthru_err_log_enabled } _nvme_err_inject_setup() @@ -495,55 +493,55 @@ local a for a in /sys/kernel/debug/"$1"/fault_inject/*; do - echo "${NS_DEV_FAULT_INJECT_SAVE[${a}]}" > "${a}" + _set_attr "${NS_DEV_FAULT_INJECT_SAVE[${a}]}" "${a}" done for a in /sys/kernel/debug/"$2"/fault_inject/*; do - echo "${CTRL_DEV_FAULT_INJECT_SAVE[${a}]}" > "${a}" + _set_attr "${CTRL_DEV_FAULT_INJECT_SAVE[${a}]}" "${a}" done } _nvme_enable_err_inject() { - echo "$2" > /sys/kernel/debug/"$1"/fault_inject/verbose - echo "$3" > /sys/kernel/debug/"$1"/fault_inject/probability - echo "$4" > /sys/kernel/debug/"$1"/fault_inject/dont_retry - echo "$5" > /sys/kernel/debug/"$1"/fault_inject/status - echo "$6" > /sys/kernel/debug/"$1"/fault_inject/times + _set_attr "$2" /sys/kernel/debug/"$1"/fault_inject/verbose + _set_attr "$3" /sys/kernel/debug/"$1"/fault_inject/probability + _set_attr "$4" /sys/kernel/debug/"$1"/fault_inject/dont_retry + _set_attr "$5" /sys/kernel/debug/"$1"/fault_inject/status + _set_attr "$6" /sys/kernel/debug/"$1"/fault_inject/times } _nvme_disable_err_inject() { - echo 0 > /sys/kernel/debug/"$1"/fault_inject/probability - echo 0 > /sys/kernel/debug/"$1"/fault_inject/times + _set_attr 0 /sys/kernel/debug/"$1"/fault_inject/probability + _set_attr 0 /sys/kernel/debug/"$1"/fault_inject/times } _nvme_enable_passthru_admin_error_logging() { - echo on > /sys/class/nvme/"$1"/passthru_err_log_enabled + _set_attr on /sys/class/nvme/"$1"/passthru_err_log_enabled } _nvme_enable_passthru_io_error_logging() { - echo on > /sys/class/nvme/"$2"/"$1"/passthru_err_log_enabled + _set_attr on /sys/class/nvme/"$2"/"$1"/passthru_err_log_enabled } _nvme_disable_passthru_admin_error_logging() { - echo off > /sys/class/nvme/"$1"/passthru_err_log_enabled + _set_attr off /sys/class/nvme/"$1"/passthru_err_log_enabled } _nvme_disable_passthru_io_error_logging() { - echo off > /sys/class/nvme/"$2"/"$1"/passthru_err_log_enabled + _set_attr off /sys/class/nvme/"$2"/"$1"/passthru_err_log_enabled } _nvme_reset_ctrl() { - echo 1 > /sys/class/nvme/"$1"/reset_controller + _set_attr 1 /sys/class/nvme/"$1"/reset_controller } _nvme_delete_ctrl() { - echo 1 > /sys/class/nvme/"$1"/delete_controller + _set_attr 1 /sys/class/nvme/"$1"/delete_controller } # Check whether the version of the fio is greater than or equal to $1.$2.$3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/tests/scsi/009 new/blktests-0+20260623.5a62429/tests/scsi/009 --- old/blktests-0+20260416.1d68a36/tests/scsi/009 2026-04-16 09:22:38.000000000 +0200 +++ new/blktests-0+20260623.5a62429/tests/scsi/009 2026-06-22 23:29:10.000000000 +0200 @@ -143,6 +143,7 @@ test_desc="TEST 8 - perform a pwritev2 with size of sysfs_atomic_unit_max_bytes + 512 " test_desc+="bytes with RWF_ATOMIC flag - pwritev2 should not be succesful" + bytes_to_write=$(( sysfs_atomic_unit_max_bytes + sysfs_logical_block_size )) bytes_written=$(run_xfs_io_pwritev2_atomic "$TEST_DEV" "$bytes_to_write") if [ "$bytes_written" = "" ] then diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/tests/scsi/009.out new/blktests-0+20260623.5a62429/tests/scsi/009.out --- old/blktests-0+20260416.1d68a36/tests/scsi/009.out 2026-04-16 09:22:38.000000000 +0200 +++ new/blktests-0+20260623.5a62429/tests/scsi/009.out 2026-06-22 23:29:10.000000000 +0200 @@ -6,6 +6,7 @@ TEST 5 - check statx stx_atomic_write_unit_min - pass TEST 6 - check statx stx_atomic_write_unit_max - pass TEST 7 - perform a pwritev2 with size of sysfs_atomic_unit_max_bytes with RWF_ATOMIC flag - pwritev2 should be succesful - pass +pwrite: Invalid argument TEST 8 - perform a pwritev2 with size of sysfs_atomic_unit_max_bytes + 512 bytes with RWF_ATOMIC flag - pwritev2 should not be succesful - pass TEST 9 - perform a pwritev2 with size of sysfs_atomic_unit_min_bytes with RWF_ATOMIC flag - pwritev2 should be succesful - pass pwrite: Invalid argument diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/tests/throtl/002 new/blktests-0+20260623.5a62429/tests/throtl/002 --- old/blktests-0+20260416.1d68a36/tests/throtl/002 2026-04-16 09:22:38.000000000 +0200 +++ new/blktests-0+20260623.5a62429/tests/throtl/002 2026-06-22 23:29:10.000000000 +0200 @@ -21,7 +21,7 @@ local io_size_kb block_size local iops=256 - page_size=$(getconf PAGE_SIZE) + page_size=$(_get_page_size) if ! _set_up_throtl --sector_size "${page_size}"; then return 1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/tests/throtl/003 new/blktests-0+20260623.5a62429/tests/throtl/003 --- old/blktests-0+20260416.1d68a36/tests/throtl/003 2026-04-16 09:22:38.000000000 +0200 +++ new/blktests-0+20260623.5a62429/tests/throtl/003 2026-06-22 23:29:10.000000000 +0200 @@ -18,7 +18,7 @@ echo "Running ${TEST_NAME}" local page_size - page_size=$(getconf PAGE_SIZE) + page_size=$(_get_page_size) if ! _set_up_throtl --sector_size "${page_size}"; then return 1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/tests/throtl/007 new/blktests-0+20260623.5a62429/tests/throtl/007 --- old/blktests-0+20260416.1d68a36/tests/throtl/007 2026-04-16 09:22:38.000000000 +0200 +++ new/blktests-0+20260623.5a62429/tests/throtl/007 2026-06-22 23:29:10.000000000 +0200 @@ -19,7 +19,7 @@ echo "Running ${TEST_NAME}" local page_size - page_size=$(getconf PAGE_SIZE) + page_size=$(_get_page_size) if ! _set_up_throtl --sector_size "${page_size}"; then return 1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/tests/throtl/008 new/blktests-0+20260623.5a62429/tests/throtl/008 --- old/blktests-0+20260416.1d68a36/tests/throtl/008 1970-01-01 01:00:00.000000000 +0100 +++ new/blktests-0+20260623.5a62429/tests/throtl/008 2026-06-22 23:29:10.000000000 +0200 @@ -0,0 +1,107 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-3.0+ +# Copyright (C) 2026 Google LLC +# +# Test cgroup iocost IOPS limiting. + +. tests/throtl/rc +. common/fio + +DESCRIPTION="test cgroup iocost controller limits" + +requires() { + _have_fio + _have_kernel_option BLK_CGROUP_IOCOST +} + +set_conditions() { + _set_throtl_blkdev_type "$@" +} + +run_test() { + # dev_t is global to make it available in the caller. + dev_t=$(<"/sys/block/${THROTL_DEV}/dev") + if [[ -z "$dev_t" ]]; then + echo "Failed to get major:minor for ${THROTL_DEV}" + return 1 + fi + + # Configure iocost controller globally for the device + # min=100.00 max=100.00 forces vrate to be fixed at 100% + if ! echo "$dev_t enable=1 min=100.00 max=100.00" > "$(_cgroup2_base_dir)/io.cost.qos"; then + echo "Failed to configure io.cost.qos" + return 1 + fi + + # Limit read iops to 100 and write iops to 10. + # Setting rbps/wbps to 0 means they are ignored (costs calculated purely based on IOPS) + if ! echo "$dev_t ctrl=user model=linear rbps=0 rseqiops=100 rrandiops=100 wbps=0 wseqiops=10 wrandiops=10" > "$(_cgroup2_base_dir)/io.cost.model"; then + echo "Failed to configure io.cost.model" + return 1 + fi + + # 1. Run FIO read test + local -a FIO_PERF_FIELDS + FIO_PERF_FIELDS=("read iops") + if ! _fio_perf --bs=4k --rw=randread --name=read-test --filename="/dev/${THROTL_DEV}" \ + --ioengine=libaio --direct=1 --iodepth=64 --time_based --runtime=10 \ + --cgroup="blktests/${THROTL_DIR}" &> "${FULL}"; then + echo "FIO read test failed" + return 1 + fi + cat "$TMPDIR/fio_perf" >> "$FULL" + local read_iops=${TEST_RUN["read iops"]} + if [[ -z "$read_iops" ]]; then + echo "Read IOPS is empty" + return 1 + elif (( "$(echo "$read_iops < 90 || $read_iops > 110" | bc -l)" )); then + echo "Read IOPS $read_iops not in expected range [90, 110]" + return 1 + fi + + # 2. Run FIO write test + FIO_PERF_FIELDS=("write iops") + if ! _fio_perf --bs=4k --rw=randwrite --name=write-test --filename="/dev/${THROTL_DEV}" \ + --ioengine=libaio --direct=1 --iodepth=64 --time_based --runtime=10 \ + --cgroup="blktests/${THROTL_DIR}" &> "${FULL}"; then + echo "FIO write test failed" + return 1 + fi + cat "$TMPDIR/fio_perf" >> "$FULL" + local write_iops=${TEST_RUN["write iops"]} + if [[ -z "$write_iops" ]]; then + echo "Write IOPS is empty" + return 1 + elif (( "$(echo "$write_iops < 8 || $write_iops > 12" | bc -l)" )); then + echo "Write IOPS $write_iops not in expected range [8, 12]" + return 1 + fi +} + +test() { + local test_status + + echo "Running ${TEST_NAME}" + + if ! _set_up_throtl; then + echo "_set_up_throtl failed" + return 1 + fi + + run_test + test_status=$? + + if [ -n "$dev_t" ]; then + echo "$dev_t enable=0" > "$(_cgroup2_base_dir)/io.cost.qos" + echo "$dev_t ctrl=auto" > "$(_cgroup2_base_dir)/io.cost.model" + fi + + _clean_up_throtl + + if [ "$test_status" -eq 0 ]; then + echo "Test complete" + else + echo "Test failed" + return 1 + fi +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/tests/throtl/008.out new/blktests-0+20260623.5a62429/tests/throtl/008.out --- old/blktests-0+20260416.1d68a36/tests/throtl/008.out 1970-01-01 01:00:00.000000000 +0100 +++ new/blktests-0+20260623.5a62429/tests/throtl/008.out 2026-06-22 23:29:10.000000000 +0200 @@ -0,0 +1,2 @@ +Running throtl/008 +Test complete diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/tests/ublk/001 new/blktests-0+20260623.5a62429/tests/ublk/001 --- old/blktests-0+20260416.1d68a36/tests/ublk/001 2026-04-16 09:22:38.000000000 +0200 +++ new/blktests-0+20260623.5a62429/tests/ublk/001 2026-06-22 23:29:10.000000000 +0200 @@ -7,6 +7,7 @@ . tests/ublk/rc DESCRIPTION="test ublk delete" +QUICK=1 _run() { local type=$1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/tests/ublk/002 new/blktests-0+20260623.5a62429/tests/ublk/002 --- old/blktests-0+20260416.1d68a36/tests/ublk/002 2026-04-16 09:22:38.000000000 +0200 +++ new/blktests-0+20260623.5a62429/tests/ublk/002 2026-06-22 23:29:10.000000000 +0200 @@ -7,6 +7,7 @@ . tests/ublk/rc DESCRIPTION="test ublk crash with delete after dead confirmation" +QUICK=1 _run() { local type=$1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/tests/ublk/003 new/blktests-0+20260623.5a62429/tests/ublk/003 --- old/blktests-0+20260416.1d68a36/tests/ublk/003 2026-04-16 09:22:38.000000000 +0200 +++ new/blktests-0+20260623.5a62429/tests/ublk/003 2026-06-22 23:29:10.000000000 +0200 @@ -7,6 +7,7 @@ . tests/ublk/rc DESCRIPTION="test mounting block device exported by ublk" +QUICK=1 requires() { _have_program mkfs.ext4 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/tests/ublk/004 new/blktests-0+20260623.5a62429/tests/ublk/004 --- old/blktests-0+20260416.1d68a36/tests/ublk/004 2026-04-16 09:22:38.000000000 +0200 +++ new/blktests-0+20260623.5a62429/tests/ublk/004 2026-06-22 23:29:10.000000000 +0200 @@ -7,6 +7,7 @@ . tests/ublk/rc DESCRIPTION="test ublk crash with delete just after daemon kill" +QUICK=1 _run() { local type=$1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/tests/ublk/005 new/blktests-0+20260623.5a62429/tests/ublk/005 --- old/blktests-0+20260416.1d68a36/tests/ublk/005 2026-04-16 09:22:38.000000000 +0200 +++ new/blktests-0+20260623.5a62429/tests/ublk/005 2026-06-22 23:29:10.000000000 +0200 @@ -9,6 +9,7 @@ . tests/ublk/rc DESCRIPTION="test ublk recovery with one time daemon kill" +QUICK=1 _run() { local type=$1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/tests/ublk/006 new/blktests-0+20260623.5a62429/tests/ublk/006 --- old/blktests-0+20260416.1d68a36/tests/ublk/006 2026-04-16 09:22:38.000000000 +0200 +++ new/blktests-0+20260623.5a62429/tests/ublk/006 2026-06-22 23:29:10.000000000 +0200 @@ -9,6 +9,7 @@ . tests/ublk/rc DESCRIPTION="test ublk recovery with two times daemon kill" +QUICK=1 _run() { local type=$1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/blktests-0+20260416.1d68a36/tests/zbd/014 new/blktests-0+20260623.5a62429/tests/zbd/014 --- old/blktests-0+20260416.1d68a36/tests/zbd/014 2026-04-16 09:22:38.000000000 +0200 +++ new/blktests-0+20260623.5a62429/tests/zbd/014 2026-06-22 23:29:10.000000000 +0200 @@ -23,7 +23,6 @@ _have_driver f2fs _have_driver null_blk _have_program fscrypt - _have_program getconf _have_program mkfs.f2fs for o in BLK_INLINE_ENCRYPTION_FALLBACK FS_ENCRYPTION_INLINE_CRYPT; do if ! _check_kernel_option "$o"; then @@ -112,7 +111,7 @@ local bio_max_vecs=256 local page_size - page_size=$(getconf PAGE_SIZE) + page_size=$(_get_page_size) # In bytes. local max_inl_encr_bio_size=$((bio_max_vecs * page_size))
