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