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