X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=t%2Fzbd%2Ffunctions;h=d49555a82eea08b5f632b0d80ec338692581b4b2;hb=de5ed0e4d398bc9d4576f9b2b82d7686989c27e1;hp=173f0ca64a421dcb863e124b2effe5b42c0bd08c;hpb=1b412cb45ceb198b881e6c724f11daf28e831977;p=fio.git diff --git a/t/zbd/functions b/t/zbd/functions index 173f0ca6..d49555a8 100644 --- a/t/zbd/functions +++ b/t/zbd/functions @@ -1,8 +1,7 @@ #!/bin/bash -# To do: switch to blkzone once blkzone reset works correctly. -blkzone= -#blkzone=$(type -p blkzone 2>/dev/null) +blkzone=$(type -p blkzone 2>/dev/null) +sg_inq=$(type -p sg_inq 2>/dev/null) zbc_report_zones=$(type -p zbc_report_zones 2>/dev/null) zbc_reset_zone=$(type -p zbc_reset_zone 2>/dev/null) if [ -z "${blkzone}" ] && @@ -34,9 +33,23 @@ first_sequential_zone() { max_open_zones() { local dev=$1 - if [ -n "${blkzone}" ]; then - # To do: query the maximum number of open zones using sg_raw - return 1 + if [ -n "${sg_inq}" ]; then + if ! ${sg_inq} -e --page=0xB6 --len=20 --hex "$dev" 2> /dev/null; then + # Non scsi device such as null_blk can not return max open zones. + # Use default value. + echo 128 + else + ${sg_inq} -e --page=0xB6 --len=20 --hex "$dev" | tail -1 | + { + read -r offset b0 b1 b2 b3 trailer || return $? + # Convert from hex to decimal + max_nr_open_zones=$((0x${b0})) + max_nr_open_zones=$((max_nr_open_zones * 256 + 0x${b1})) + max_nr_open_zones=$((max_nr_open_zones * 256 + 0x${b2})) + max_nr_open_zones=$((max_nr_open_zones * 256 + 0x${b3})) + echo ${max_nr_open_zones} + } + fi else ${zbc_report_zones} "$dev" | sed -n 's/^[[:blank:]]*Maximum number of open sequential write required zones:[[:blank:]]*//p'