xref: /aosp_15_r20/external/ublksrv/tests/common/loop_common (revision 94c4a1e103eb1715230460aab379dff275992c20)
1#!/bin/bash
2# SPDX-License-Identifier: MIT or GPL-2.0-only
3
4export LO_IMG_SZ=1G
5
6_create_loop_image() {
7	local type=$1
8	local my_size=$2
9
10	local my_file=`mktemp -p ${UBLK_TMP_DIR}  ublk_loop_${type}_${my_size}_XXXXX`
11	truncate -s ${my_size} ${my_file}
12
13	my_size=`stat --printf="%s" ${my_file}`
14	local my_count=`expr ${my_size} / 1048576`
15
16	dd if=/dev/zero of=$my_file bs=1M count=${my_count} oflag=direct > /dev/null 2>&1
17	echo $my_file
18}
19
20_remove_loop_image() {
21	local file=$1
22
23	[ -f "$file" ] && rm -f $file
24}
25
26__remove_kernel_loop_dev() {
27	local DEV=$1
28	losetup -d $DEV
29	udevadm settle
30}
31
32__create_kernel_loop_dev() {
33	local my_file=`echo $T_TYPE_PARAMS | awk '{print $(NF)}'`
34	if eval $T_TYPE $T_TYPE_PARAMS > /dev/null 2>&1; then
35		local my_dev=`losetup -l | grep "${my_file}" | awk '{print $1}'`
36		udevadm settle
37		echo $my_dev
38	else
39		echo ""
40	fi
41}
42
43__run_loop_dev_perf()
44{
45	local JOBS=$1
46	local DEV=`__create_kernel_loop_dev`
47
48	if [ "$DEV" == "" ]; then
49		export T_TYPE_PARAMS=${T_TYPE_PARAMS//--direct-io=on/" "}
50		DEV=`__create_kernel_loop_dev`
51	fi
52
53	echo -e "\t$T_TYPE $T_TYPE_PARAMS, fio: ($DEV libaio, dio, io jobs $JOBS)..."
54	__run_dev_perf_no_create "loop" $JOBS $DEV
55
56	__remove_kernel_loop_dev $DEV
57}
58