xref: /aosp_15_r20/external/ublksrv/tests/generic/006 (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
6*94c4a1e1SFrank Pivaecho -e "\trun fio with dev recovery, type 2:"
7*94c4a1e1SFrank Pivaecho -e "\t(1)kill all ubq_deamon, (2)recover with new ubq_daemon, (3)kill all ubq_deamon, (4)delete dev"
8*94c4a1e1SFrank Piva
9*94c4a1e1SFrank PivaBS=4k
10*94c4a1e1SFrank PivaRW=rw
11*94c4a1e1SFrank PivaJOBS=4
12*94c4a1e1SFrank PivaQUEUES=2
13*94c4a1e1SFrank PivaRT=$TRUNTIME*2
14*94c4a1e1SFrank PivaLOOPS=4
15*94c4a1e1SFrank PivaURING_COMP=1
16*94c4a1e1SFrank PivaNEED_GET_DATA=1
17*94c4a1e1SFrank PivaRECOVERY=1
18*94c4a1e1SFrank PivaRECOVERY_REISSUE=0
19*94c4a1e1SFrank Piva
20*94c4a1e1SFrank Pivaublk_run_recover_kill_test()
21*94c4a1e1SFrank Piva{
22*94c4a1e1SFrank Piva	for CNT in `seq $LOOPS`; do
23*94c4a1e1SFrank Piva		export T_TYPE_PARAMS="-t null -q $QUEUES -u $URING_COMP -g $NEED_GET_DATA -r $RECOVERY -i $RECOVERY_REISSUE"
24*94c4a1e1SFrank Piva		DEV=`__create_ublk_dev`
25*94c4a1e1SFrank Piva		echo -e "\trun fio with killing $DEV(ublk add $T_TYPE_PARAMS) queue daemon $CNT"
26*94c4a1e1SFrank Piva		__run_fio_libaio $DEV $BS $RW $JOBS $RT > /dev/null 2 >& 1 &
27*94c4a1e1SFrank Piva		sleep 2
28*94c4a1e1SFrank Piva		pid1=`__ublk_get_pid $DEV`
29*94c4a1e1SFrank Piva		kill -9 $pid1
30*94c4a1e1SFrank Piva		sleep 2
31*94c4a1e1SFrank Piva		secs=0
32*94c4a1e1SFrank Piva		while [ $secs -lt 10 ]; do
33*94c4a1e1SFrank Piva			state=`__ublk_get_dev_state $DEV`
34*94c4a1e1SFrank Piva			[ "$state" == "QUIESCED" ] && break
35*94c4a1e1SFrank Piva			sleep 1
36*94c4a1e1SFrank Piva			let secs++
37*94c4a1e1SFrank Piva		done
38*94c4a1e1SFrank Piva		secs=0
39*94c4a1e1SFrank Piva		while [ $secs -lt 10 ]; do
40*94c4a1e1SFrank Piva			RES=`__recover_ublk_dev $DEV`
41*94c4a1e1SFrank Piva			[ $RES -eq 0 ] && break
42*94c4a1e1SFrank Piva			sleep 1
43*94c4a1e1SFrank Piva			let secs++
44*94c4a1e1SFrank Piva		done
45*94c4a1e1SFrank Piva		if [ $RES -ne 0 ]; then
46*94c4a1e1SFrank Piva			echo -e "\trecover $DEV failed"
47*94c4a1e1SFrank Piva		fi
48*94c4a1e1SFrank Piva		sleep 2
49*94c4a1e1SFrank Piva        pid2=`__ublk_get_pid $DEV`
50*94c4a1e1SFrank Piva		kill -9 $pid2
51*94c4a1e1SFrank Piva		sleep 2
52*94c4a1e1SFrank Piva		RES=`__remove_ublk_dev_return $DEV`
53*94c4a1e1SFrank Piva		if [ $RES -ne 0 ]; then
54*94c4a1e1SFrank Piva				echo -e "\tdelete $DEV failed"
55*94c4a1e1SFrank Piva				break
56*94c4a1e1SFrank Piva		fi
57*94c4a1e1SFrank Piva		wait
58*94c4a1e1SFrank Piva		sleep 3
59*94c4a1e1SFrank Piva	done
60*94c4a1e1SFrank Piva}
61*94c4a1e1SFrank Piva
62*94c4a1e1SFrank Pivafor RECOVERY_REISSUE in `seq 0 1`; do
63*94c4a1e1SFrank Piva	ublk_run_recover_kill_test
64*94c4a1e1SFrank Pivadone
65