When zonemode is zbd and block size is not divisor of zone size, write target zone selection does not work as expected. First four patches in this series fix the issue by introducing zone finish operation. First three patches do preparation and the 4th patch does the fix. This series also fix four more issues related to verify with zonemode zbd. The first issue is that verify is allowed only when block size is divisor of zone size. The 5th patch removes this limitation. The second and third issue are caused by zone reset, which erases data pattern for verify. The 6th and 7th patches adjust verify and zone reset timing to avoid verify errors by the erased data pattern. The last issue is experimental verify, which does not work with zonemode=zbd. The 8th patch checks options to error out when experimental verify is specified together with zonemode=zbd. Five more patches follow to make test cases in t/zbd match with the fixes. Of note is that the new test case #59 added by 11th patch may fail, when libzbc IO engine is specified to t/zbd/test-zbd-support script with -l option. For SAS ZBC drive, use latest libzbc with fix to avoid the faliure [1]. For SATA ZAC drive, use kernel with a fix posted to linux-ide list recently [2]. [1] https://github.com/westerndigitalcorporation/libzbc/commit/6de6869acbe7c3a12758b1f42c9da47bb873e621 [2] https://lore.kernel.org/linux-ide/20221107040229.1548793-1-shinichiro.kawasaki@xxxxxxx/ Changes from v3: * 6th patch: fixed get_next_verify() call and rand_seed check condition * 11th patch: improved to cover four types of workloads Changes from v2: * Improved commit message and block comment in 3rd patch * Fixed a comment typo in last patch * Added Tested-by and Reviewed-by tags Changes from v1: * Separated zbd_zone_remainder() addition to 3rd patch and added suggested hunks * Added last 13th patch for a new test case to test experimental_verify option * Reflected other comments on the list * Added Tested-by and Reviewed-by tags Shin'ichiro Kawasaki (13): oslib: blkzoned: add blkzoned_finish_zone() helper function engines/libzbc: add libzbc_finish_zone() helper function zbd: add zbd_zone_remainder() helper function zbd: finish zones with remainder smaller than minimum write block size zbd: allow block size not divisor of zone size zbd, verify: verify before zone reset for zone_reset_threshold/frequency zbd: fix zone reset condition for verify_backlog option zbd: prevent experimental verify with zonemode=zbd t/zbd: fix test case #33 for block size unaligned to zone size t/zbd: modify test case #34 for block size unaligned to zone size t/zbd: add test case to check zone_reset_threshold/frequency with verify t/zbd: remove experimental_verify option from test case #54 t/zbd: add test case to check experimental_verify option engines/libzbc.c | 34 +++++++++ ioengines.h | 2 + oslib/blkzoned.h | 8 ++ oslib/linux-blkzoned.c | 37 +++++++++ t/zbd/test-zbd-support | 56 +++++++++++--- verify.c | 6 +- zbd.c | 168 +++++++++++++++++++++++++++-------------- zbd.h | 2 - 8 files changed, 240 insertions(+), 73 deletions(-) -- 2.37.1