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