[PATCH blktests v2 1/2] common/rc: Check both max_active_zones and max_open_zones
From: Shin'ichiro Kawasaki <hidden>
Date: 2020-12-04 02:44:24
Subsystem:
the rest · Maintainer:
Linus Torvalds
Linux kernel 5.9 introduced new sysfs attributes max_active_zones and
max_open_zones for zoned block devices. Max_open_zones is the limit of
number of zones in open status. Max_active_zones is the limit of number
of zones in open or closed status. Currently, the helper function
_test_dev_max_active_zones() checks only max_active_zones, but it is not
enough. When the device has max_open_zones, check for max_active_zones
can not avoid the errors for write operations.
To avoid the error, improve the function _test_dev_max_active_zones() to
check the limits both. Rename it to _test_dev_max_open_active_zones().
When one of the limits is available for the test target device, return
it. If both limits are available, return smaller limit.
Also modify block/004 and zbd/003 to call the renamed helper function
and update comment description.
Fixes: e6981bb2d9ce ("common/rc: Add _test_dev_max_active_zones() helper function")
Signed-off-by: Shin'ichiro Kawasaki <redacted>
Reviewed-by: Johannes Thumshirn <redacted>
---
common/rc | 19 ++++++++++++++++---
tests/block/004 | 2 +-
tests/zbd/003 | 6 +++---
3 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/common/rc b/common/rc
index d396fb5..a837542 100644
--- a/common/rc
+++ b/common/rc@@ -280,11 +280,24 @@ _test_dev_is_partition() { [[ -n ${TEST_DEV_PART_SYSFS} ]] } -_test_dev_max_active_zones() { +# Return max open zones or max active zones of the test target device. +# If the device has both, return smaller value. +_test_dev_max_open_active_zones() { + local -i moz=0 + local -i maz=0 + + if [[ -r "${TEST_DEV_SYSFS}/queue/max_open_zones" ]]; then + moz=$(_test_dev_queue_get max_open_zones) + fi + if [[ -r "${TEST_DEV_SYSFS}/queue/max_active_zones" ]]; then - _test_dev_queue_get max_active_zones + maz=$(_test_dev_queue_get max_active_zones) + fi + + if ((!moz)) || ((maz && maz < moz)); then + echo "${maz}" else - echo 0 + echo "${moz}" fi }
diff --git a/tests/block/004 b/tests/block/004
index 6eff6ce..a7cec95 100755
--- a/tests/block/004
+++ b/tests/block/004@@ -26,7 +26,7 @@ test_device() { if _test_dev_is_zoned; then _test_dev_queue_set scheduler deadline opts+=("--direct=1" "--zonemode=zbd") - opts+=("--max_open_zones=$(_test_dev_max_active_zones)") + opts+=("--max_open_zones=$(_test_dev_max_open_active_zones)") fi FIO_PERF_FIELDS=("write iops")
diff --git a/tests/zbd/003 b/tests/zbd/003
index 1e92e81..7f4fa2c 100755
--- a/tests/zbd/003
+++ b/tests/zbd/003@@ -30,10 +30,10 @@ test_device() { echo "Running ${TEST_NAME}" - # When the test device has max_active_zone limit, reset all zones. This - # ensures the write operations in this test case do not open zones + # When the test device has max_open/active_zones limit, reset all zones. + # This ensures the write operations in this test case do not open zones # beyond the limit. - (($(_test_dev_max_active_zones))) && blkzone reset "${TEST_DEV}" + (($(_test_dev_max_open_active_zones))) && blkzone reset "${TEST_DEV}" # Get physical block size as dd block size to meet zoned block device # requirement
--
2.28.0