xref: /linux/tools/testing/selftests/ublk/test_params_01.sh (revision 55ab7e14222e5f0b0fd9f7711ca391d2924b35e3)
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