#!/bin/bash
# SPDX-License-Identifier: MIT or GPL-2.0-only

export LO_IMG_SZ=1G

_create_loop_image() {
	local type=$1
	local my_size=$2

	local my_file=`mktemp -p ${UBLK_TMP_DIR}  ublk_loop_${type}_${my_size}_XXXXX`
	truncate -s ${my_size} ${my_file}

	my_size=`stat --printf="%s" ${my_file}`
	local my_count=`expr ${my_size} / 1048576`

	dd if=/dev/zero of=$my_file bs=1M count=${my_count} oflag=direct > /dev/null 2>&1
	echo $my_file
}

_remove_loop_image() {
	local file=$1

	[ -f "$file" ] && rm -f $file
}

__remove_kernel_loop_dev() {
	local DEV=$1
	losetup -d $DEV
	udevadm settle
}

__create_kernel_loop_dev() {
	local my_file=`echo $T_TYPE_PARAMS | awk '{print $(NF)}'`
	if eval $T_TYPE $T_TYPE_PARAMS > /dev/null 2>&1; then
		local my_dev=`losetup -l | grep "${my_file}" | awk '{print $1}'`
		udevadm settle
		echo $my_dev
	else
		echo ""
	fi
}

__run_loop_dev_perf()
{
	local JOBS=$1
	local DEV=`__create_kernel_loop_dev`

	if [ "$DEV" == "" ]; then
		export T_TYPE_PARAMS=${T_TYPE_PARAMS//--direct-io=on/" "}
		DEV=`__create_kernel_loop_dev`
	fi

	echo -e "\t$T_TYPE $T_TYPE_PARAMS, fio: ($DEV libaio, dio, io jobs $JOBS)..."
	__run_dev_perf_no_create "loop" $JOBS $DEV

	__remove_kernel_loop_dev $DEV
}
