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