xref: /aosp_15_r20/external/ublksrv/tests/generic/005 (revision 94c4a1e103eb1715230460aab379dff275992c20)
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