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