Nitesh Shetty [Wed, 14 Jun 2023 17:06:42 +0000 (22:36 +0530)]
block/034: Test memory is released by null-blk driver with memory_backed=1
This tests memory leak, by loading/unloading nullblk driver.
Steps:
1. Load nullblk driver with memory_backed=1
2. "dd" of 50M
3. Unload null-blk driver
We do it for 5 iterations to avoid any noise.
Shin'ichiro Kawasaki [Fri, 26 May 2023 04:58:43 +0000 (13:58 +0900)]
block/011: recover test target NVME device capacity
The test case runs fio while disabling and enabling PCI device of the
test target block device. When the block device is a NVME PCI device,
the test triggers NVME controller reset. When an error happens during
the reset, NVME PCI driver marks zero capacity for the device. This
zero capacity device causes failures of the following test cases.
To avoid the failures by zero device capacity, check the capacity at the
test end. If it is zero, remove the device and rescan PCI bus to detect
the device again, and regain the correct capacity.
Shin'ichiro Kawasaki [Fri, 26 May 2023 04:58:42 +0000 (13:58 +0900)]
block/011: skip when mounted block devices are affected
The test case disables PCI device of the test target block device. When
the PCI device has other block devices mounted, those block devices are
disabled also. If the mounted device is the system disk, the test screws
up the system. To avoid such dangerous operation, check if the target
PCI device has mounted block devices. In that case, skip the test.
Daniel Wagner [Tue, 6 Jun 2023 07:54:43 +0000 (09:54 +0200)]
nvmeof-mp: Remove nvmeof-mp tests
The nvmeof-mp are designed to test a NVMe multipathing setup using
dm_multipath, which was a configuration RHEL shipped. In the meantime,
RHEL switched also to NVMe native multipathing which is tested with the
nvme tests.
The nvme tests cover all the use cases which are testes by nvmeof-mp
including the transport failure, see nvme/040.
During LSFMM 2023 conference it was decided it is better to drop these
tests and reduce the maintenance burden on blktests.
Cc: John Meneghini <jmeneghi@redhat.com> Signed-off-by: Daniel Wagner <dwagner@suse.de> Reviewed-by: John Meneghini <jmeneghi@redhat.com> Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Yang Xu [Wed, 31 May 2023 01:07:01 +0000 (09:07 +0800)]
nvme/{016,017}: use _check_genctr instead of _filter_discovery
Since commit 328943e3 ("Update tests for discovery log page changes"),
blktests also include the discovery subsystem itself. But it
will lead these cases fails on older nvme-cli system.
To avoid this, like nvme/002, use _check_genctr to check instead of
comparing many discovery Log Entry output.
Signed-off-by: Yang Xu <xuyang2018.jy@fujitsu.com> Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Ziyang Zhang [Wed, 24 May 2023 08:55:41 +0000 (16:55 +0800)]
tests: Add ublk tests
It is very important to test ublk crash handling since the userspace
part is not reliable. Especially we should test removing device, killing
ublk daemons and user recovery feature.
Add five new tests for ublk to cover these cases.
Signed-off-by: Ziyang Zhang <ZiyangZhang@linux.alibaba.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Daniel Wagner [Thu, 11 May 2023 14:09:53 +0000 (16:09 +0200)]
nvme/{016,017}: Make the number iterations configurable
Some tests hard code high values of iterations. This makes them run
relatively long compared to the other tests. Introduce a new environment
variable nvme_num_iter to allow tune the runtime.
Reviewed-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com> Signed-off-by: Daniel Wagner <dwagner@suse.de> Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Daniel Wagner [Thu, 11 May 2023 14:09:51 +0000 (16:09 +0200)]
nvme/{045,047}: Calculate IO size for random fio jobs
_nvme_calc_run_io_size() returns the jobs size for _run_fio_rand_io()
function. The jobs size is the size per job, thus we have to divide
through the number of CPUs.
_xfs_run_fio_verify_io() is replaced with _run_fio_rand_io() because the
former has a minimum nvme_img_size of 350M. Both tests nvme/{045,047}
just want some IO to verify that the path is working. Thus reduce the
min nmve_img_size requirement switch to _run_fio_rand_io()
Signed-off-by: Daniel Wagner <dwagner@suse.de> Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Daniel Wagner [Thu, 11 May 2023 14:09:50 +0000 (16:09 +0200)]
nvme: Add minimal test image size requirement
Some tests need a minimal test image size to work correctly. Thus add a
helper to check the size and update these tests accordingly.
The image minimum is 4M because some of the test have hard coded values.
All tests which use the xfs fio verification job have a minimum
requirement of 350M impossed by the xfs filesystem.
Reviewed-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com> Signed-off-by: Daniel Wagner <dwagner@suse.de> Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Daniel Wagner [Thu, 11 May 2023 14:09:49 +0000 (16:09 +0200)]
nvme: Make test image size configurable
The reduce the overall runtime of the testsuite by making the default
size of the test image small. For verification jobs, the default can be
overwriten via the newly introduced nvme_img_size environment variable.
Reviewed-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com> Signed-off-by: Daniel Wagner <dwagner@suse.de> Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Daniel Wagner [Thu, 11 May 2023 14:09:46 +0000 (16:09 +0200)]
common/xfs: Limit fio size job to fit into xfs fs
The usable capacity of the filesystem is less than the raw
partition/device size due to the additional meta/log data.
Ensure that the job size for fio is not exceeding the limits.
Because we have hard coded the path where we mount the filesystem
and don't want to expose this, we just update max size inside
_xfs_run_fio_verify_io(). No need to leak this into the caller.
Daniel Wagner [Thu, 11 May 2023 14:09:45 +0000 (16:09 +0200)]
common/xfs: Make size argument optional for _xfs_run_fio_verify_io
Make the size argument optional by reading the filesystem info. The
caller doesn't have to guess (or calculate) how big the max IO size.
The log data structure of XFS is reducing the capacity.
Daniel Wagner [Thu, 11 May 2023 14:09:43 +0000 (16:09 +0200)]
nvme/rc: Auto convert test device size info
Introduce a convert_to_mb() helper which converts the size argument
to MBytes and use in test device require function. This makes it
possible to use user input strings in future.
Reviewed-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com> Signed-off-by: Daniel Wagner <dwagner@suse.de> Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
block/{001,002,027}: allow to run with built-in scsi_debug and sd_mod
To allow the test cases run with build-in scsi_debug, replace
'_have_module scsi_debug' with _have_scsi_debug, and replace
_init_scsi_debug with _configure_scsi_debug.
Also to allow block/001 run with built-in sd_mod, replace
'_have_module sd_mod' with '_have_kernel_option BLK_DEV_SD'. When sd_mod
driver is built-in, /sys/module/sd_mod directory is not created. Then
_have_driver() can not detect availability of the driver. Instead, refer
the kernel config to check availability of the driver.
scsi/{004,005}: allow to run with built-in scsi_debug
To allow the test case run with build-in scsi_debug, replace
'_have_module scsi_debug' with _have_scsi_debug, and replace
_init_scsi_debug with _configure_scsi_debug.
To set up scsi_debug devices with built-in scsi_debug module, introduce
a new helper function _configure_scsi_debug. It works in similar manner
as _init_scsi_debug which sets up scsi_debug devices with loadable
scsi_debug module.
_configure_scsi_debug takes parameters of scsi_debug devices in format
of 'key=value' as its arguments. It calls another new helper function
_scsi_debug_key_path to find sysfs files corresponding to the keys in
/sys/module/scsi_debug/parameters or /sys/bus/pseudo/drivers/scsi_debug.
When the file is found, write the value to the file.
Before setting the parameters through sysfs files, save current values
of scsi_debug parameters in ORIG_SCSI_DEBUG_PARAMS. Use the saved values
to restore parameters in _exit_scsi_debug. Do this value restore not
only for the parameters modified in _configure_scsi_debug but also for
the parameters modified by test cases.
Among the parameters, 'add_host' has special meaning to add new hosts.
Then handle it separately so that it is set at last in
_configure_scsi_debug, and restored at first in _exit_scsi_debug.
Also record the hosts which exist before _configure_scsi_debug in the
array ORIG_SCSI_DEBUG_HOSTS. Those hosts should not be used for testing,
then do not add them to SCSI_DEBUG_HOSTS.
common/scsi_debug: factor out _setup_scsi_debug_vars
As a preparation to introduce a new helper function to configure
scsi_debug device with built-in scsi_debug module, factor out a part
of _init_scsi_debug to a new function _setup_scsi_debug_vars.
As a preparation to adapt test cases to built-in scsi_debug module, re-
define the _have_scsi_debug function. It checks that the scsi_debug
module is built as a loadable module. Modify it to check that the
scsi_debug module is available as built-in module or loadable module.
Also replace all _have_scsi_debug calls in test cases with
"_have_module scsi_debug" so that the change of _have_scsi_debug do not
affect the test cases. Following commits will modify them to call
_have_scsi_debug, only for test cases ready to run with built-in
scsi_debug.
common/rc: skip module file check if modules path does not exist
When all of the kernel modules are built-in, /lib/modules/*/kernel path
may not exist. In this case, check for the path results in failure. Skip
the check when the path does not exist.
When kernel version numbers have postfix letters, _have_fio_ver fail to
parse the version. For example, uname -r returns "6.3.0+", it handles
"0+" as a number and fails to parse. Fix it by dropping all letters
other than numbers or period.
Akinobu Mita [Sun, 16 Apr 2023 04:37:44 +0000 (13:37 +0900)]
block/{014,015,030}: don't require modular null_blk for fault-injection
This blktests change changes null_blk fault-injection settings to be
configured via configfs instead of module parameters.
This allows null_blk fault-injection tests to run even if the null_blk is
built-in the kernel and not built as a module.
If the null_blk does not yet support configuring fault-injection via
configfs, fall back to set up with module parameter.
nvme/039: avoid failure by error message rate limit
The test case nvme/039 tests that expected error messages are printed
for errors injected to the nvme driver. However, the test case fails by
chance when previous test cases generate many error messages. In this
case, the kernel function pr_err_ratelimited() may suppress the error
messages that the test case expects. Also, it may print messages that
the test case does not expect, such as "blk_print_req_error: xxxx
callbacks suppressed".
To avoid the failure, make two improvements for the test case. Firstly,
wait DEFAULT_RATE_LIMIT seconds at the beginning of the test to ensure
the expected error messages are not suppressed. Secondly, exclude the
unexpected message for the error message check. Introduce a helper
function last_dmesg() for the second improvement.
User can communicate to NVMe char device (/dev/ngXnY) using the
uring-passthrough interface. This test exercises some of these
communication pathways, using the 'io_uring_cmd' ioengine of fio.
Daniel Wagner [Wed, 29 Mar 2023 09:02:02 +0000 (11:02 +0200)]
nvme/047: Test different queue types for fabrics transports
Test if the fabrics transports are handling different queues types
correctly.
Currently, only TCP and RDMA from the fabric transport family support
this feature, so limit the test to these two.
We also issue some I/O to make sure that not just the plain connect
works. For this we have to use a file system which supports direct I/O
and hence we use a device backend.
Shin'ichiro Kawasaki [Wed, 1 Mar 2023 08:03:01 +0000 (17:03 +0900)]
src/Makefile: fix number sign handling in macro
GNU make version 4.3 introduced a backward-incompatible change. The
number sign '#' now should not have preceding backslash in a macro [1].
To make macros with number signs work regardless of make versions,
assign the number sign to a variable.
Ming Lei [Fri, 24 Feb 2023 12:45:02 +0000 (20:45 +0800)]
block/033: add test to cover gendisk leak
So far only sync ublk removal is supported, and the device's
last reference is dropped in gendisk's ->free_disk(), so it
can be used to test gendisk leak issue.
Signed-off-by: Ming Lei <ming.lei@redhat.com> Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com> Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Ming Lei [Fri, 24 Feb 2023 12:45:01 +0000 (20:45 +0800)]
src: add mini ublk source code
Prepare for adding ublk related test:
1) ublk delete is sync removal, this way is convenient to
blkg/queue/disk instance leak issue
2) mini ublk has two builtin target(null, loop), and loop IO is
handled by io_uring, so we can use ublk to cover part of io_uring
workloads
3) not like loop/nbd, ublk won't pre-allocate/add disk, and always
add/delete disk dynamically, this way may cover disk plug & unplug
tests
4) ublk specific test given people starts to use it, so better to
let blktest cover ublk related tests
Add mini ublk source for test purpose only, which is easy to use:
./miniublk add -t {null|loop} [-q nr_queues] [-d depth] [-n dev_id]
default: nr_queues=2(max 4), depth=128(max 128), dev_id=-1(auto allocation)
-t loop -f backing_file
-t null
./miniublk del [-n dev_id] -a
-a delete all devices, -n delete specified device
./miniublk list [-n dev_id] -a
-a list all devices, -n list specified device, default -a
miniublk depends on liburing 2.2, adds HAVE_LIBURING for checking if
liburing 2.2 exists; also add HAVE_UBLK_HEADER for checking ublk kernel
UAPI header exits. If either of two dependencies can't be met, simply
ignore miniublk target.
Also v6.0 is the 1st linux kernel release with ublk.
Signed-off-by: Ming Lei <ming.lei@redhat.com> Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com> Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Shin'ichiro Kawasaki [Mon, 13 Feb 2023 02:00:08 +0000 (11:00 +0900)]
check, common/rc: support normal user privilege
To run commands with normal user privilege, add a new config variable
NORMAL_USER and two helper functions _run_user and _require_normal_user.
The user name specified to NORMAL_USER is used to run the commands
specified to _run_user. The test cases which require NORMAL_USER shall
call _require_normal_user to ensure the NORMAL_USER is valid.
Ming Lei [Wed, 8 Feb 2023 01:02:35 +0000 (09:02 +0800)]
block/032: add test to cover umount one deleted disk
disk can be disappear any time because of error handling, when
it is usually being mounted. Make sure umount can be done successfully
after disk deleting is done from error handling.
Hannes Reinecke [Mon, 6 Feb 2023 14:51:42 +0000 (15:51 +0100)]
Update tests for discovery log page changes
With TP8013 the discovery log includes now a record for the
discovery subsystem itself, so we need to update the blktests
to be aware of the new discovery log page layout.
Bart Van Assche [Thu, 2 Feb 2023 18:20:39 +0000 (10:20 -0800)]
src/discontiguous-io.cpp: Fix the build
Fix the following build error:
g++ -O2 -std=c++11 -Wall -Wextra -Wshadow -Wno-sign-compare -Werror -DHAVE_LINUX_BLKZONED_H -o discontiguous-io discontiguous-io.cpp
discontiguous-io.cpp: In function ‘void dumphex(std::ostream&, const void*, size_t)’:
discontiguous-io.cpp:92:24: error: ‘uintptr_t’ was not declared in this scope
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Bart Van Assche [Wed, 1 Feb 2023 20:31:45 +0000 (12:31 -0800)]
tests/block/007: Rework I/O polling
Linux kernel commit a614dd228035 ("block: don't allow writing to the poll
queue attribute") makes writes into /sys/block/*/queue/io_poll a no-op.
Rework test block/007 such that it no longer uses that attribute.
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Hannes Reinecke [Tue, 30 Aug 2022 12:36:55 +0000 (14:36 +0200)]
nvme: ignore error messages when running tests
There are subtle differences in the way fc is creating associations,
causing the error messages from 'nvme connect' to be different than
on other transports. As we'll get notified anyway when 'nvme connect'
fails there is not point is specifying the error message in the response
files, so just suppress error messages here.
Shin'ichiro Kawasaki [Thu, 26 Jan 2023 10:59:15 +0000 (19:59 +0900)]
Merge pull request #107 from bvanassche/shellcheck
Fix multiple shellcheck warnings
This avoids warnings shellcheck version 0.9.0 reports. The warnings SC2004, SC2319 and SC2320 are addressed. It also addresses the warning 2119 so that "make check" command runs shellcheck without an exception.
Shin'ichiro Kawasaki [Wed, 30 Nov 2022 02:40:12 +0000 (11:40 +0900)]
block/017: extend IO inflight duration
The test case block/017 often fails on slow test systems. When it runs
on QEMU and kernel with LOCKDEP, it fails around 50% by chance with
error message as follows:
The test case issues one read and one write to a null_blk device, and
checks that inflight counters reports correct numbers of inflight IOs.
To keep IOs inflight during test, it prepares null_blk device with
completion_nsec parameter 0.5 second. However, when test system is slow,
inflight counter check takes long time and the read completes before the
check. Hence the failure.
To avoid the failure, extend the inflight duration of IOs. Prepare a
null_blk device without completion_nsec parameter and measure time to
check the inflight counters. Prepare null_blk device again specifying
completion_nsec parameter 0.5 seconds plus the measured time of inflight
counter check.
Alan Adamson [Wed, 16 Nov 2022 22:39:45 +0000 (14:39 -0800)]
tests/nvme/039: Remove passthrough command tests
Commit d7ac8dca938c ("nvme: quiet user passthrough command errors")
disabled error logging for passthrough commands so the associated
tests should be removed.
When an error logging opt-in mechanism for passthrough commands is
provided, the tests can be added back.
Yi Zhang [Wed, 2 Nov 2022 02:57:02 +0000 (10:57 +0800)]
nvme/012,013,035: change fio I/O size and move size definition place
Change fio I/O size of nvme/012,013,035 from 950m to 900m, since recent change
increased the xfs log size and it caused fio failure with I/O size 950m.
Also add size parameter to _run_fio_verify_io. This allows to move the fio I/O
size definition from common/xfs to the test case, so that device size and fio
I/O size are both defined at single place.
The commit 8017ea524367 ("common/rc: ensure modules are loadable in
_have_modules()") introduced a helper function _module_file_exists()
which assumes module files have extension ".ko". However, the assumption
is not true when module files are compressed. In this case, extensions
of modules files have abbreviations of compression algorithm such as
".ko.xz",".ko.gz" or ".ko.zstd". This results in module file existence
check failure and unexpected test skips.
Fix this by changing module file search condition to cover module file
extensions with the compression algorithm abbreviations.
Fixes: 8017ea524367 ("common/rc: ensure modules are loadable in _have_modules()") Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com> Link: https://github.com/osandov/blktests/issues/101
Kernel commit 8fe4ce5836e9 ("scsi: core: Fix a use-after-free"; v6.0-rc5)
fixes a kernel crash triggered by RDMA hot-unplug. This test triggers
RDMA hot-unplug and also triggers a kernel crash without the
aforementioned kernel commit.
Cc: Li Zhijian <lizhijian@fujitsu.com> Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Once I thought explicit nbd module load in nbd/rc is required due to the
commit 06a0ba866d90 ("common/rc: avoid module load in _have_driver()").
However, it was not a good solution and _have_driver() was modified
again to load module. Hence, revert explicit nbd module load in nbd/rc.
check,common/rc: load module in _have_driver() and unload after test
The commit 06a0ba866d90 ("common/rc: avoid module load in
_have_driver()") removed module load from _have_driver(). However, it
was pointed out no module load in _have_driver() is confusing and adds
complexity [1]. It requires explicit module loads and unloads in number
of test cases. The module unloads must be checked if unload is safe or
not. Also module load error must be handled. To avoid these complexity,
a new helper function would be required, but it will be look like the
_have_driver() with module load.
Then revert back the feature to load module in _have_driver(). To
address the issue that the commit 06a0ba866d90 tried to fix, record the
modules loaded by _have_driver() in MODULES_TO_UNLOAD array. Unload
the recorded modules after each test case processing completed. This
avoids the side-effect by the modules loaded by _have_driver().
Shin'ichiro Kawasaki [Tue, 23 Aug 2022 00:11:53 +0000 (09:11 +0900)]
common,tests: replace _have_modules() with _have_module()
The helper functions _have_modules() and _have_driver() have similar
roles, but they take different number of arguments. The former takes
multiple module names and the latter takes single module name. To make
their usage consistent, modify _have_modules() to _have_module() to take
single argument. This improves readability by checking one module per
line.
Shin'ichiro Kawasaki [Tue, 23 Aug 2022 00:11:50 +0000 (09:11 +0900)]
common/rc: ensure modules are loadable in _have_modules()
The commit e9645877fbf0 ("common: add a helper if a driver is
available") introduced the helper function _have_driver() to check the
driver or module is available no matter whether it is a loadable module
or built-in module. It was assumed that _have_modules() whould check
that specified modules are loadable and not built-in.
However, the function _have_modules() returns true even if the specified
modules are built-in and not loadable. This causes failures of some test
cases on test system with built-in modules such as nbd/004. It also
means that _have_modules() and _have_driver() have same functionality.
To avoid the unexpected failures, fix _have_modules() to return false
when the specified modules are built-in. Check if loadable module file
exists by searching the module file path. If the module file does not
exist, return false. Also add comments to describe the difference
between _have_driver() and _have_modules().
Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
Shin'ichiro Kawasaki [Tue, 23 Aug 2022 00:11:49 +0000 (09:11 +0900)]
nbd/rc: load nbd module explicitly
After the commit "common/rc: avoid module load in _have_driver()",
_have_driver() no longer loads specified module. However, nbd test cases
and _have_nbd_netlink() function assume that the module is loaded by
calling _have_driver(). This causes test case failures and unexpected
skips. To fix them, load and unload modules explicitly in functions
_start_nbd_server*(), _stop_nbd_server*() and _have_nbd_netlink().
Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
Shin'ichiro Kawasaki [Tue, 23 Aug 2022 00:11:48 +0000 (09:11 +0900)]
common/rc: avoid module load in _have_driver()
The helper function _have_driver() checks availability of the specified
driver, or module, regardless whether it is loadable or not. When the
driver is loadable, it loads the module for checking, but does not
unload it. This makes following test cases fail.
Such failure happens when nvmeof-mp test group is executed after nvme
test group with tcp transport. _have_driver() for tcp transport loads
nvmet and nvmet-tcp modules. nvmeof-mp test group tries to unload the
nvmet module but it fails because of dependency to the nvmet-tcp module.
To avoid the failure, do not load module in _have_driver() using -n
dry run option of the modprobe command. While at it, fix a minor problem
of modname '-' replacement. Currently, only the first '-' in modname is
replaced with '_'. Replace all '-'s.
Fixes: e9645877fbf0 ("common: add a helper if a driver is available") Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Shin'ichiro Kawasaki [Mon, 8 Aug 2022 01:44:07 +0000 (10:44 +0900)]
zbd/009: check mkfs.btrfs version
mkfs.btrfs versions from 5.17 to 5.18.x fail to format zoned block
devices without option '-m single' [1]. Skip the test case when
mkfs.btrfs has the versions.