xref: /spdk/test/bdev/nbd_common.sh (revision b30d57cdad6d2bc75cc1e4e2ebbcebcb0d98dcfa)
1set -e
2
3function nbd_start_disks() {
4	local rpc_server=$1
5	local bdev_list=($2)
6	local nbd_list=($3)
7	local i
8
9	for ((i = 0; i < ${#nbd_list[@]}; i++)); do
10		$rootdir/scripts/rpc.py -s $rpc_server nbd_start_disk ${bdev_list[$i]} ${nbd_list[$i]}
11		# Wait for nbd device ready
12		waitfornbd $(basename ${nbd_list[$i]})
13	done
14}
15
16function nbd_start_disks_without_nbd_idx() {
17	local rpc_server=$1
18	local bdev_list=($2)
19	local i
20	local nbd_device
21
22	for ((i = 0; i < ${#bdev_list[@]}; i++)); do
23		nbd_device=$($rootdir/scripts/rpc.py -s $rpc_server nbd_start_disk ${bdev_list[$i]})
24		# Wait for nbd device ready
25		waitfornbd $(basename ${nbd_device})
26	done
27}
28
29function waitfornbd_exit() {
30	local nbd_name=$1
31
32	for ((i = 1; i <= 20; i++)); do
33		if grep -q -w $nbd_name /proc/partitions; then
34			sleep 0.1
35		else
36			break
37		fi
38	done
39
40	return 0
41}
42
43function nbd_stop_disks() {
44	local rpc_server=$1
45	local nbd_list=($2)
46	local i
47
48	for i in "${nbd_list[@]}"; do
49		$rootdir/scripts/rpc.py -s $rpc_server nbd_stop_disk $i
50		waitfornbd_exit $(basename $i)
51	done
52}
53
54function nbd_get_count() {
55	# return = count of spdk nbd devices
56	local rpc_server=$1
57
58	nbd_disks_json=$($rootdir/scripts/rpc.py -s $rpc_server nbd_get_disks)
59	nbd_disks_name=$(echo "${nbd_disks_json}" | jq -r '.[] | .nbd_device')
60	count=$(echo "${nbd_disks_name}" | grep -c /dev/nbd || true)
61	echo $count
62}
63
64function nbd_dd_data_verify() {
65	local nbd_list=($1)
66	local operation=$2
67	local tmp_file=$SPDK_TEST_STORAGE/nbdrandtest
68
69	if [ "$operation" = "write" ]; then
70		# data write
71		dd if=/dev/urandom of=$tmp_file bs=4096 count=256
72		for i in "${nbd_list[@]}"; do
73			dd if=$tmp_file of=$i bs=4096 count=256 oflag=direct
74		done
75	elif [ "$operation" = "verify" ]; then
76		# data read and verify
77		for i in "${nbd_list[@]}"; do
78			cmp -b -n 1M $tmp_file $i
79		done
80		rm $tmp_file
81	fi
82}
83
84function nbd_rpc_data_verify() {
85	local rpc_server=$1
86	local bdev_list=($2)
87	local nbd_list=($3)
88
89	nbd_start_disks $rpc_server "${bdev_list[*]}" "${nbd_list[*]}"
90	count=$(nbd_get_count $rpc_server)
91	if [ $count -ne ${#nbd_list[@]} ]; then
92		return 1
93	fi
94
95	nbd_dd_data_verify "${nbd_list[*]}" "write"
96	nbd_dd_data_verify "${nbd_list[*]}" "verify"
97
98	nbd_stop_disks $rpc_server "${nbd_list[*]}"
99	count=$(nbd_get_count $rpc_server)
100	if [ $count -ne 0 ]; then
101		return 1
102	fi
103
104	return 0
105}
106
107function nbd_rpc_start_stop_verify() {
108	local rpc_server=$1
109	local bdev_list=($2)
110
111	nbd_start_disks_without_nbd_idx $rpc_server "${bdev_list[*]}"
112
113	nbd_disks_json=$($rootdir/scripts/rpc.py -s $rpc_server nbd_get_disks)
114	nbd_disks_name=($(echo "${nbd_disks_json}" | jq -r '.[] | .nbd_device'))
115	nbd_stop_disks $rpc_server "${nbd_disks_name[*]}"
116
117	count=$(nbd_get_count $rpc_server)
118	if [ $count -ne 0 ]; then
119		return 1
120	fi
121
122	return 0
123}
124