1#!/bin/bash 2# SPDX-License-Identifier: MIT or GPL-2.0-only 3 4. common/fio_common 5. common/loop_common 6. common/qcow2_common 7. common/nbd_common 8 9echo -e "\trun fio with dev recovery, type 1:" 10echo -e "\t(1)kill all ubq_deamon, (2)recover with new ubq_daemon, (3)delete dev" 11 12BS=4k 13RW=rw 14JOBS=4 15QUEUES=2 16RT=$TRUNTIME*2 17LOOPS=1 18URING_COMP=1 19NEED_GET_DATA=1 20RECOVERY=1 21RECOVERY_REISSUE=0 22 23ublk_run_recover_test() 24{ 25 local type=$1 26 local file=`_create_image $type "null" 256M` 27 28 if [ "$type" == "null" ]; then 29 local backing="" 30 elif [ "$type" == "nbd" ]; then 31 local backing="--host 127.0.0.1" 32 else 33 local backing="-f $file" 34 fi 35 36 if [ "$type" == "qcow2" ]; then 37 QUEUES=1 38 else 39 QUEUES=2 40 fi 41 42 for CNT in `seq $LOOPS`; do 43 export T_TYPE_PARAMS="-t $type -q $QUEUES -u $URING_COMP -g $NEED_GET_DATA -r $RECOVERY -i $RECOVERY_REISSUE $backing" 44 DEV=`__create_ublk_dev` 45 echo -e "\trun fio with killing $DEV(ublk add $T_TYPE_PARAMS) queue daemon $CNT" 46 __run_fio_libaio $DEV $BS $RW $JOBS $RT > /dev/null 2 >& 1 & 47 sleep 2 48 pid=`__ublk_get_pid $DEV` 49 kill -9 $pid 50 sleep 2 51 secs=0 52 while [ $secs -lt 10 ]; do 53 state=`__ublk_get_dev_state $DEV 0` 54 [ "$state" == "QUIESCED" ] && break 55 sleep 1 56 let secs++ 57 done 58 secs=0 59 while [ $secs -lt 10 ]; do 60 RES=`__recover_ublk_dev $DEV` 61 [ $RES -eq 0 ] && break 62 sleep 1 63 let secs++ 64 done 65 if [ $RES -ne 0 ]; then 66 echo -e "\trecover $DEV failed" 67 fi 68 sleep 2 69 RES=`__remove_ublk_dev_return $DEV` 70 if [ $RES -ne 0 ]; then 71 echo -e "\tdelete $DEV failed" 72 break 73 fi 74 wait 75 sleep 3 76 done 77 _remove_image ${type} $file 78} 79 80for TGT in $ALL_TGTS; do 81 for RECOVERY_REISSUE in `seq 0 1`; do 82 ublk_run_recover_test $TGT 83 done 84done 85