Message ID | 20201203082244.268632-2-shinichiro.kawasaki@wdc.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Support max_open_zones and max_active_zones | expand |
On 03/12/2020 09:22, Shin'ichiro Kawasaki wrote: > -_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 ret=0 > + local -i maz=0 > + > + if [[ -r "${TEST_DEV_SYSFS}/queue/max_open_zones" ]]; then > + ret=$(_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 > - else > - echo 0 > + maz=$(_test_dev_queue_get max_active_zones) > fi > + > + if ((!ret)) || ((maz && maz < ret)); then > + ret="${maz}" > + fi > + > + echo "${ret}" > } Maybe change $ret to $moz and then if ((!moz)) || ((maz && maz < moz)); then echo ${maz} else echo ${moz} fi Otherwise looks good, Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
On Dec 03, 2020 / 09:50, Johannes Thumshirn wrote: > On 03/12/2020 09:22, Shin'ichiro Kawasaki wrote: > > -_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 ret=0 > > + local -i maz=0 > > + > > + if [[ -r "${TEST_DEV_SYSFS}/queue/max_open_zones" ]]; then > > + ret=$(_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 > > - else > > - echo 0 > > + maz=$(_test_dev_queue_get max_active_zones) > > fi > > + > > + if ((!ret)) || ((maz && maz < ret)); then > > + ret="${maz}" > > + fi > > + > > + echo "${ret}" > > } > > Maybe change $ret to $moz and then > > if ((!moz)) || ((maz && maz < moz)); then > echo ${maz} > else > echo ${moz} > fi Thanks. I agree that your code is easier to understand. Will reflect this comment and send out v2. > > Otherwise looks good, > Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> >
diff --git a/common/rc b/common/rc index d396fb5..a14f093 100644 --- a/common/rc +++ b/common/rc @@ -280,12 +280,25 @@ _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 ret=0 + local -i maz=0 + + if [[ -r "${TEST_DEV_SYSFS}/queue/max_open_zones" ]]; then + ret=$(_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 - else - echo 0 + maz=$(_test_dev_queue_get max_active_zones) fi + + if ((!ret)) || ((maz && maz < ret)); then + ret="${maz}" + fi + + echo "${ret}" } _require_test_dev_is_partition() { 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
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> --- common/rc | 21 +++++++++++++++++---- tests/block/004 | 2 +- tests/zbd/003 | 6 +++--- 3 files changed, 21 insertions(+), 8 deletions(-)