xref: /spdk/test/bdev/nbd_common.sh (revision 5977aad8f7486552c94c5cc93ea9bb110e1cb5d0)
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 start_nbd_disk ${bdev_list[$i]} ${nbd_list[$i]}
11		# Wait for nbd device ready
12		waitfornbd $(basename ${nbd_list[$i]})
13	done
14}
15
16function waitfornbd_exit() {
17	local nbd_name=$1
18
19	for ((i=1; i<=20; i++)); do
20		if grep -q -w $nbd_name /proc/partitions; then
21			sleep 0.1
22		else
23			break
24		fi
25	done
26
27	return 0
28}
29
30function nbd_stop_disks() {
31	local rpc_server=$1
32	local nbd_list=($2)
33	local i
34
35	for i in ${nbd_list[@]}; do
36		$rootdir/scripts/rpc.py -s $rpc_server stop_nbd_disk $i
37		waitfornbd_exit $(basename $i)
38	done
39}
40
41function nbd_get_count() {
42	# return = count of spdk nbd devices
43	local rpc_server=$1
44
45	nbd_disks_json=`$rootdir/scripts/rpc.py -s $rpc_server get_nbd_disks`
46	nbd_disks_name=`echo "${nbd_disks_json}" | jq -r '.[] | .nbd_device'`
47	count=`echo "${nbd_disks_name}" | grep -c /dev/nbd || true`
48	echo $count
49}
50
51function nbd_dd_data_verify() {
52	local nbd_list=($1)
53	local operation=$2
54	local tmp_file=/tmp/nbdrandtest
55
56	if [ "$operation" = "write" ]; then
57		# data write
58		dd if=/dev/urandom of=$tmp_file bs=4096 count=256
59		for i in ${nbd_list[@]}; do
60			dd if=$tmp_file of=$i bs=4096 count=256 oflag=direct
61		done
62	elif [ "$operation" = "verify" ]; then
63		# data read and verify
64		for i in ${nbd_list[@]}; do
65			cmp -b -n 1M $tmp_file $i
66		done
67		rm $tmp_file
68	fi
69}
70
71function nbd_rpc_data_verify() {
72	local rpc_server=$1
73	local bdev_list=($2)
74	local nbd_list=($3)
75
76	nbd_start_disks $rpc_server "${bdev_list[*]}" "${nbd_list[*]}"
77	count=$(nbd_get_count $rpc_server)
78	if [ $count -ne ${#nbd_list[@]} ]; then
79		return -1
80	fi
81
82	nbd_dd_data_verify "${nbd_list[*]}" "write"
83	nbd_dd_data_verify "${nbd_list[*]}" "verify"
84
85	nbd_stop_disks $rpc_server "${nbd_list[*]}"
86	count=$(nbd_get_count $rpc_server)
87	if [ $count -ne 0 ]; then
88		return -1
89	fi
90
91	return 0
92}
93