xref: /aosp_15_r20/external/ublksrv/tests/common/nbd_common (revision 94c4a1e103eb1715230460aab379dff275992c20)
1*94c4a1e1SFrank Piva#!/bin/bash
2*94c4a1e1SFrank Piva# SPDX-License-Identifier: GPL-2.0
3*94c4a1e1SFrank Piva
4*94c4a1e1SFrank Pivaexport NBDSRV=127.0.0.1
5*94c4a1e1SFrank Pivaexport NBD_SIZE=2G
6*94c4a1e1SFrank Pivaexport _NBDS_PID=${UBLK_TMP_DIR}/nbds_pid
7*94c4a1e1SFrank Piva
8*94c4a1e1SFrank Piva_kill_nbdkit() {
9*94c4a1e1SFrank Piva	if [ -f ${_NBDS_PID} ]; then
10*94c4a1e1SFrank Piva		local nbds_pid=`cat ${_NBDS_PID}`
11*94c4a1e1SFrank Piva		kill -9 ${nbds_pid} > /dev/null 2>&1
12*94c4a1e1SFrank Piva		local count=0
13*94c4a1e1SFrank Piva		while [ $count -lt 32 ]; do
14*94c4a1e1SFrank Piva			kill -0 ${nbds_pid} > /dev/null 2>&1
15*94c4a1e1SFrank Piva			[ $? -ne 0 ] && break
16*94c4a1e1SFrank Piva			let count++
17*94c4a1e1SFrank Piva			sleep 1
18*94c4a1e1SFrank Piva		done
19*94c4a1e1SFrank Piva	fi
20*94c4a1e1SFrank Piva}
21*94c4a1e1SFrank Piva
22*94c4a1e1SFrank Piva_create_nbd_image() {
23*94c4a1e1SFrank Piva	local type=$1
24*94c4a1e1SFrank Piva	local my_size=$2
25*94c4a1e1SFrank Piva	local my_file=`mktemp -p ${UBLK_TMP_DIR}  ublk_nbd_${type}_${my_size}_XXXXX`
26*94c4a1e1SFrank Piva
27*94c4a1e1SFrank Piva	which nbdkit > /dev/null 2>&1
28*94c4a1e1SFrank Piva	[ $? -ne 0 ] && echo "please install nbdkit package" && exit -1
29*94c4a1e1SFrank Piva
30*94c4a1e1SFrank Piva	if [ $type == "none" ]; then
31*94c4a1e1SFrank Piva		nbdkit -P ${_NBDS_PID} memory $my_size
32*94c4a1e1SFrank Piva	else
33*94c4a1e1SFrank Piva		truncate -s ${my_size} ${my_file}
34*94c4a1e1SFrank Piva
35*94c4a1e1SFrank Piva		my_size=`stat --printf="%s" ${my_file}`
36*94c4a1e1SFrank Piva		local my_count=`expr ${my_size} / 1048576`
37*94c4a1e1SFrank Piva		dd if=/dev/zero of=$my_file bs=1M count=${my_count} oflag=direct > /dev/null 2>&1
38*94c4a1e1SFrank Piva
39*94c4a1e1SFrank Piva		nbdkit -P ${_NBDS_PID} file $my_file
40*94c4a1e1SFrank Piva	fi
41*94c4a1e1SFrank Piva	sleep 1
42*94c4a1e1SFrank Piva	echo $my_file
43*94c4a1e1SFrank Piva}
44*94c4a1e1SFrank Piva
45*94c4a1e1SFrank Piva_remove_nbd_image() {
46*94c4a1e1SFrank Piva	local file=$1
47*94c4a1e1SFrank Piva
48*94c4a1e1SFrank Piva	_kill_nbdkit
49*94c4a1e1SFrank Piva
50*94c4a1e1SFrank Piva	[ -f ${_NBDS_PID} ] && rm -f ${_NBDS_PID}
51*94c4a1e1SFrank Piva
52*94c4a1e1SFrank Piva	[ -f "$file" ] && rm -f $file
53*94c4a1e1SFrank Piva}
54