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

export NBDSRV=127.0.0.1
export NBD_SIZE=2G
export _NBDS_PID=${UBLK_TMP_DIR}/nbds_pid

_kill_nbdkit() {
	if [ -f ${_NBDS_PID} ]; then
		local nbds_pid=`cat ${_NBDS_PID}`
		kill -9 ${nbds_pid} > /dev/null 2>&1
		local count=0
		while [ $count -lt 32 ]; do
			kill -0 ${nbds_pid} > /dev/null 2>&1
			[ $? -ne 0 ] && break
			let count++
			sleep 1
		done
	fi
}

_create_nbd_image() {
	local type=$1
	local my_size=$2
	local my_file=`mktemp -p ${UBLK_TMP_DIR}  ublk_nbd_${type}_${my_size}_XXXXX`

	which nbdkit > /dev/null 2>&1
	[ $? -ne 0 ] && echo "please install nbdkit package" && exit -1

	if [ $type == "none" ]; then
		nbdkit -P ${_NBDS_PID} memory $my_size
	else
		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

		nbdkit -P ${_NBDS_PID} file $my_file
	fi
	sleep 1
	echo $my_file
}

_remove_nbd_image() {
	local file=$1

	_kill_nbdkit

	[ -f ${_NBDS_PID} ] && rm -f ${_NBDS_PID}

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