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