| #!/bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| |
| . "$(cd "$(dirname "$0")" && pwd)"/test_common.sh |
| |
| ERR_CODE=0 |
| |
| run_set_params_success() |
| { |
| local name=$1 |
| |
| shift |
| |
| echo "$name" |
| if ! "$UBLK_PROG" set_params -q 1 -d 2 "$@"; then |
| echo "$name: SET_PARAMS check failed" |
| return 1 |
| fi |
| } |
| |
| run_set_params_failure() |
| { |
| local name=$1 |
| |
| shift |
| |
| echo "$name" |
| if "$UBLK_PROG" set_params -q 1 -d 2 "$@"; then |
| echo "$name: SET_PARAMS succeeded unexpectedly" |
| return 1 |
| fi |
| } |
| |
| run_zoned_set_params_success() |
| { |
| local name=$1 |
| |
| shift |
| |
| echo "$name" |
| if ! "$UBLK_PROG" set_params -q 1 -d 2 -u --zoned "$@"; then |
| echo "$name: SET_PARAMS check failed" |
| return 1 |
| fi |
| } |
| |
| run_zoned_set_params_failure() |
| { |
| local name=$1 |
| |
| shift |
| |
| echo "$name" |
| if "$UBLK_PROG" set_params -q 1 -d 2 -u --zoned "$@"; then |
| echo "$name: SET_PARAMS succeeded unexpectedly" |
| return 1 |
| fi |
| } |
| |
| _prep_test "params" "SET_PARAMS validation" |
| |
| if [ ! -c /dev/ublk-control ]; then |
| _cleanup_test |
| _show_result $TID $UBLK_SKIP_CODE |
| fi |
| |
| run_set_params_success "valid basic params" || |
| ERR_CODE=1 |
| |
| run_set_params_failure "missing basic params" \ |
| --param_types none || |
| ERR_CODE=1 |
| |
| run_set_params_failure "logical block larger than physical block" \ |
| --logical_bs_shift 12 --physical_bs_shift 9 || |
| ERR_CODE=1 |
| |
| run_set_params_failure "too large max sectors" \ |
| --max_sectors 2049 || |
| ERR_CODE=1 |
| |
| if _have_feature "ZONED" && _have_feature "USER_COPY"; then |
| run_zoned_set_params_success "valid zoned params" \ |
| --param_types basic,zoned || |
| ERR_CODE=1 |
| |
| run_zoned_set_params_failure "missing zoned params" || |
| ERR_CODE=1 |
| |
| run_zoned_set_params_failure "non-power-of-2 zone size" \ |
| --param_types basic,zoned \ |
| --chunk_sectors 96 --dev_sectors $((96 * 16)) || |
| ERR_CODE=1 |
| |
| run_zoned_set_params_failure "zero max zone append" \ |
| --param_types basic,zoned \ |
| --max_zone_append_sectors 0 || |
| ERR_CODE=1 |
| |
| run_zoned_set_params_failure "too many open zones" \ |
| --param_types basic,zoned \ |
| --dev_sectors $((128 * 4)) --max_open_zones 5 || |
| ERR_CODE=1 |
| |
| run_zoned_set_params_failure "too many active zones" \ |
| --param_types basic,zoned \ |
| --dev_sectors $((128 * 4)) --max_active_zones 5 || |
| ERR_CODE=1 |
| else |
| echo "zoned ublk feature unavailable, skip zoned SET_PARAMS cases" |
| fi |
| |
| _cleanup_test |
| _show_result $TID $ERR_CODE |