]> www.infradead.org Git - users/hch/blktests.git/commitdiff
common/rc: Check both max_active_zones and max_open_zones
authorShin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Tue, 29 Dec 2020 00:44:33 +0000 (09:44 +0900)
committerOmar Sandoval <osandov@fb.com>
Mon, 4 Jan 2021 22:57:17 +0000 (14:57 -0800)
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 <shinichiro.kawasaki@wdc.com>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
common/rc
tests/block/004
tests/zbd/003

index be736ea0fa8e7d6db532d900f6e448ca3019961f..85e631470881058c011d40e55d3e1cb5ae7c49f1 100644 (file)
--- 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
 }
 
index 6eff6ceee44e4feb3a7467ba1b2e8d04c90be100..a7cec95d84c4be87713dc8ae014d8e12c2335d4d 100755 (executable)
@@ -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")
index 1e92e8134186768425d11d3a9fe0fb50ffaedf45..7f4fa2cf567207b0c26639478250b8643ea2811c 100755 (executable)
@@ -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