On Tue, Jun 01, 2021 at 07:01:18AM +0000, Damien Le Moal wrote: > On 2021/06/01 15:48, Shin'ichiro Kawasaki wrote: > > Recent commit d2f442bc0bd5 ("ioengines: add get_max_open_zones zoned > > block device operation") modified fio to compare --max_open_zoned option > > s/max_open_zoned/max_open_zones > > > value and max_open_zones reported by the device. The device limit is > > fetched through sysfs or through an ioengine specific implementation. > > > > The test script currently try to fetch the max open zones limit using > > libzbc tools or sg_inq. If either of these fail, default value 128 is > > supplied. This default value can be too high when the test script is > > run for certain zoned block devices, and can therefore result in fio > > error and test case failure. > > If sysfs has the max_open_zones attribute file present, that value should be > retrieved first. libzbc and sg_inq should be used only if the sysfs attribute is > not present, that is, when running on older kernels. Since we can assume that the test script and fio versions are updated in sync, I don't see any point of duplicating the sysfs parsing in the test script. If the test script either specifies --max_open_zones=0 or omits the parameter, fio itself will either parse sysfs, or use libzbc to fetch the max limit. So I think that the test script should only use those "methods" that fio itself can't do. Right now fio can parse sysfs and use libzbc. The only remaining method is sg_inq. This only I assume that we want to keep in the test. (I guess the alternative is to implement the .get_max_open_zones() fio ioengine callback in engines/sg.c, that does the same. But we probably don't want to do that, right?) > > > > > To avoid the failure, modify the default value used in the test script > > from 128 to 0. With this, --max_open_zoned=0 is passed to fio, and it > > makes fio use the max_open_zones reported by the device. > > Why pass anything at all since now fio will use the device reported limit by > default if the user does not specify anything ? Sure, we can just omit the --max_open_zones parameter completely. That might be more clear. > > > > > Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@xxxxxxx> > > --- > > t/zbd/functions | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/t/zbd/functions b/t/zbd/functions > > index 40ffe1de..1a7ea970 100644 > > --- a/t/zbd/functions > > +++ b/t/zbd/functions > > @@ -180,8 +180,8 @@ max_open_zones() { > > if ! ${sg_inq} -e --page=0xB6 --len=20 --hex "$dev" \ > > > /dev/null 2>&1; then > > # Non scsi device such as null_blk can not return max open zones. > > This comment is a little outdated since even nullblk now has a limit exposed > through sysfs (the limit may be 0 == no limit). See above comment. sysfs should > be the first thing to look at. > > > - # Use default value. > > - echo 128 > > + # Specify 0 to indicate fio to get max open zones from the device. > > + echo 0 > > else > > ${sg_inq} -e --page=0xB6 --len=20 --hex "$dev" | tail -1 | > > { > > > > > -- > Damien Le Moal > Western Digital Research >