1*007af5e5SYao Sang#!/bin/bash 2*007af5e5SYao Sang# SPDX-License-Identifier: GPL-2.0 3*007af5e5SYao Sang 4*007af5e5SYao Sang. "$(cd "$(dirname "$0")" && pwd)"/test_common.sh 5*007af5e5SYao Sang 6*007af5e5SYao SangERR_CODE=0 7*007af5e5SYao Sang 8*007af5e5SYao Sangrun_set_params_success() 9*007af5e5SYao Sang{ 10*007af5e5SYao Sang local name=$1 11*007af5e5SYao Sang 12*007af5e5SYao Sang shift 13*007af5e5SYao Sang 14*007af5e5SYao Sang echo "$name" 15*007af5e5SYao Sang if ! "$UBLK_PROG" set_params -q 1 -d 2 "$@"; then 16*007af5e5SYao Sang echo "$name: SET_PARAMS check failed" 17*007af5e5SYao Sang return 1 18*007af5e5SYao Sang fi 19*007af5e5SYao Sang} 20*007af5e5SYao Sang 21*007af5e5SYao Sangrun_set_params_failure() 22*007af5e5SYao Sang{ 23*007af5e5SYao Sang local name=$1 24*007af5e5SYao Sang 25*007af5e5SYao Sang shift 26*007af5e5SYao Sang 27*007af5e5SYao Sang echo "$name" 28*007af5e5SYao Sang if "$UBLK_PROG" set_params -q 1 -d 2 "$@"; then 29*007af5e5SYao Sang echo "$name: SET_PARAMS succeeded unexpectedly" 30*007af5e5SYao Sang return 1 31*007af5e5SYao Sang fi 32*007af5e5SYao Sang} 33*007af5e5SYao Sang 34*007af5e5SYao Sangrun_zoned_set_params_success() 35*007af5e5SYao Sang{ 36*007af5e5SYao Sang local name=$1 37*007af5e5SYao Sang 38*007af5e5SYao Sang shift 39*007af5e5SYao Sang 40*007af5e5SYao Sang echo "$name" 41*007af5e5SYao Sang if ! "$UBLK_PROG" set_params -q 1 -d 2 -u --zoned "$@"; then 42*007af5e5SYao Sang echo "$name: SET_PARAMS check failed" 43*007af5e5SYao Sang return 1 44*007af5e5SYao Sang fi 45*007af5e5SYao Sang} 46*007af5e5SYao Sang 47*007af5e5SYao Sangrun_zoned_set_params_failure() 48*007af5e5SYao Sang{ 49*007af5e5SYao Sang local name=$1 50*007af5e5SYao Sang 51*007af5e5SYao Sang shift 52*007af5e5SYao Sang 53*007af5e5SYao Sang echo "$name" 54*007af5e5SYao Sang if "$UBLK_PROG" set_params -q 1 -d 2 -u --zoned "$@"; then 55*007af5e5SYao Sang echo "$name: SET_PARAMS succeeded unexpectedly" 56*007af5e5SYao Sang return 1 57*007af5e5SYao Sang fi 58*007af5e5SYao Sang} 59*007af5e5SYao Sang 60*007af5e5SYao Sang_prep_test "params" "SET_PARAMS validation" 61*007af5e5SYao Sang 62*007af5e5SYao Sangif [ ! -c /dev/ublk-control ]; then 63*007af5e5SYao Sang _cleanup_test 64*007af5e5SYao Sang _show_result $TID $UBLK_SKIP_CODE 65*007af5e5SYao Sangfi 66*007af5e5SYao Sang 67*007af5e5SYao Sangrun_set_params_success "valid basic params" || 68*007af5e5SYao Sang ERR_CODE=1 69*007af5e5SYao Sang 70*007af5e5SYao Sangrun_set_params_failure "missing basic params" \ 71*007af5e5SYao Sang --param_types none || 72*007af5e5SYao Sang ERR_CODE=1 73*007af5e5SYao Sang 74*007af5e5SYao Sangrun_set_params_failure "logical block larger than physical block" \ 75*007af5e5SYao Sang --logical_bs_shift 12 --physical_bs_shift 9 || 76*007af5e5SYao Sang ERR_CODE=1 77*007af5e5SYao Sang 78*007af5e5SYao Sangrun_set_params_failure "too large max sectors" \ 79*007af5e5SYao Sang --max_sectors 2049 || 80*007af5e5SYao Sang ERR_CODE=1 81*007af5e5SYao Sang 82*007af5e5SYao Sangif _have_feature "ZONED" && _have_feature "USER_COPY"; then 83*007af5e5SYao Sang run_zoned_set_params_success "valid zoned params" \ 84*007af5e5SYao Sang --param_types basic,zoned || 85*007af5e5SYao Sang ERR_CODE=1 86*007af5e5SYao Sang 87*007af5e5SYao Sang run_zoned_set_params_failure "missing zoned params" || 88*007af5e5SYao Sang ERR_CODE=1 89*007af5e5SYao Sang 90*007af5e5SYao Sang run_zoned_set_params_failure "non-power-of-2 zone size" \ 91*007af5e5SYao Sang --param_types basic,zoned \ 92*007af5e5SYao Sang --chunk_sectors 96 --dev_sectors $((96 * 16)) || 93*007af5e5SYao Sang ERR_CODE=1 94*007af5e5SYao Sang 95*007af5e5SYao Sang run_zoned_set_params_failure "zero max zone append" \ 96*007af5e5SYao Sang --param_types basic,zoned \ 97*007af5e5SYao Sang --max_zone_append_sectors 0 || 98*007af5e5SYao Sang ERR_CODE=1 99*007af5e5SYao Sang 100*007af5e5SYao Sang run_zoned_set_params_failure "too many open zones" \ 101*007af5e5SYao Sang --param_types basic,zoned \ 102*007af5e5SYao Sang --dev_sectors $((128 * 4)) --max_open_zones 5 || 103*007af5e5SYao Sang ERR_CODE=1 104*007af5e5SYao Sang 105*007af5e5SYao Sang run_zoned_set_params_failure "too many active zones" \ 106*007af5e5SYao Sang --param_types basic,zoned \ 107*007af5e5SYao Sang --dev_sectors $((128 * 4)) --max_active_zones 5 || 108*007af5e5SYao Sang ERR_CODE=1 109*007af5e5SYao Sangelse 110*007af5e5SYao Sang echo "zoned ublk feature unavailable, skip zoned SET_PARAMS cases" 111*007af5e5SYao Sangfi 112*007af5e5SYao Sang 113*007af5e5SYao Sang_cleanup_test 114*007af5e5SYao Sang_show_result $TID $ERR_CODE 115