[Ocfs2-test-devel] [PATCH 7/7] fill_verify_holes: Add fill_verify_holes.sh

tristan.ye tristan.ye at oracle.com
Sun Aug 23 21:17:14 PDT 2009


Comments inlined.

Sunil Mushran Wrote:
> single_run-WIP.sh calls fill_verify_holes.sh for a more comprehensive testrun.
>
> Signed-off-by: Sunil Mushran <sunil.mushran at oracle.com>
> ---
>  programs/fill_verify_holes/Makefile             |    2 +-
>  programs/fill_verify_holes/fill_verify_holes.sh |  157 +++++++++++++++++++++++
>  programs/python_common/single_run-WIP.sh        |   34 +++--
>  vendor/common/ocfs2-test.spec-generic.in        |    1 +
>  4 files changed, 181 insertions(+), 13 deletions(-)
>  create mode 100755 programs/fill_verify_holes/fill_verify_holes.sh
>
> diff --git a/programs/fill_verify_holes/Makefile b/programs/fill_verify_holes/Makefile
> index 00718a6..d0d53ae 100644
> --- a/programs/fill_verify_holes/Makefile
> +++ b/programs/fill_verify_holes/Makefile
> @@ -10,7 +10,7 @@ SOURCES = fill_holes.c punch_holes.c verify_holes.c fill_holes.h reservations.h
>  
>  DIST_FILES = $(SOURCES)
>  
> -BIN_EXTRA = burn-in.sh old_burn-in.sh
> +BIN_EXTRA = burn-in.sh old_burn-in.sh fill_verify_holes.sh
>  
>  BIN_PROGRAMS = fill_holes punch_holes verify_holes 
>  
> diff --git a/programs/fill_verify_holes/fill_verify_holes.sh b/programs/fill_verify_holes/fill_verify_holes.sh
> new file mode 100755
> index 0000000..5db8a51
> --- /dev/null
> +++ b/programs/fill_verify_holes/fill_verify_holes.sh
> @@ -0,0 +1,157 @@
> +#!/bin/bash
> +#
> +# fill_verify_holes.sh
> +#
> +
> +APP=`basename ${0}`
> +PATH=$PATH:/sbin	# Added sbin to the path for ocfs2-tools
>   
You may add `dirname ${0}` to PATH in case following `which fill_holes` 
fails.
> +SUDO="`which sudo` -u root"
> +DEBUGFS_BIN="`which sudo` -u root `which debugfs.ocfs2`"
> +MKFS_BIN="`which sudo` -u root `which mkfs.ocfs2`"
> +TUNEFS_BIN="`which sudo` -u root `which tunefs.ocfs2`"
> +GREP=`which grep`
> +DF=`which df`
> +ECHO="`which echo` -e"
> +AWK=`which awk`
> +FUSER=`which fuser`
> +MOUNT=`which mount`
> +UMOUNT=`which umount`
> +FILL_HOLES=`which fill_holes 2>/dev/null`
> +VERIFY_HOLES=`which verify_holes 2>/dev/null`
>   

Just a suggestion for your convenience if you like,

To source o2tf.sh, then most of the above variables are well defined 
there, and also provides a series of functions such as f_mount and f_umount.

> +
> +log_run() {
> +	echo "Run: $@"
>   

A tiny remind, you'd like to use ${ECHO} here?
> +	"$@"
> +}
> +
> +do_mount() {
> +	if [ "$#" -lt "3" ]; then
> +      		${ECHO} "Error in do_mount()"
> +		exit 1
> +	fi
> +
> +	device=$1
> +	mountpoint=$2
> +	mountopts=$3	
> +
> +	${ECHO} "${MOUNT} -o ${mountopts} ${device} ${mountpoint}"
> +	${MOUNT} -o ${mountopts} ${device} ${mountpoint} >/dev/null
> +	if [ $? -ne 0 ]; then
> +		${ECHO} "ERROR: mount -o ${mountopts} ${device} ${mountpoint}"
> +		exit 1
> +	fi
> +}
> +
> +do_umount() {
> +	if [ "$#" -lt "1" ]; then
> +		${ECHO} "Error in do_umount()"
> +		exit 1
> +	fi
> +
> +	mountpoint=$1
> +
> +	${ECHO} "${UMOUNT} ${mountpoint}"
> +	${UMOUNT} ${mountpoint}
> +	if [ $? -ne 0 ]; then
> +		${ECHO} "ERROR: umount ${mountpoint}"
> +		exit 1
> +	fi
> +}
> +
> +usage()
> +{
> +	${ECHO} "${APP} [ -M ] [ -U ] [ -i iteractions ] [ -s size ] [-o mountopts] -c count -m mountpoint -l logdir -d device"
> +	exit 1
> +}
> +
> +OPTIND=1
> +COUNT=1
> +ITER=100000
> +SIZE=10000000
> +
> +MMAPOPT=
> +UNWOPT=
> +
> +while getopts "c:d:i:l:s:m:o:MUh?" args
> +do
> +	case "$args" in
> +		c) COUNT="$OPTARG";;
> +		d) DEVICE="$OPTARG";;
> +		i) ITER="$OPTARG";;
> +		l) LOGPATH="$OPTARG";;
> +		s) SIZE="$OPTARG";;
> +		m) MOUNTPOINT="$OPTARG";;
> +		o) MOUNTOPTS="$OPTARG";;
> +		M) MMAPOPT="-m";;
> +		U) UNWOPT="-u";;
> +		h) USAGE="yes";;
> +		?) USAGE="yes";;
> +	esac
> +done
> +
> +if [ ! -z "${USAGE}" ]; then
> +	usage
> +fi
> +
> +if [ -z ${DEVICE} ] ; then
> +	${ECHO} "ERROR: No device"
> +	usage
> +elif [ ! -b ${DEVICE} ] ; then
> +	${ECHO} "ERROR: Invalid device ${DEVICE}"
> +	exit 1
> +fi
> +
> +if [ -z ${MOUNTPOINT} ] ; then
> +	${ECHO} "ERROR: No mountpoint"
> +	usage
> +elif [ ! -d ${MOUNTPOINT} ] ; then
> +	${ECHO} "ERROR: Invalid mountpoint ${MOUNTPOINT}"
> +	exit 1
> +fi
> +
> +if [ -z ${MOUNTOPTS} ] ; then
> +	MOUNTOPTS="defaults"
> +fi
> +
> +if [ -z ${FILL_HOLES} -o -z ${VERIFY_HOLES} ] ; then
> +	${ECHO} "Error: fill_holes and/or verify_holes not in PATH"
> +	exit 1
> +fi
> +
> +fnamebase="iter${ITER}.size${SIZE}"
> +
> +do_mount ${DEVICE} ${MOUNTPOINT} ${MOUNTOPTS}
> +
> +for i in `seq -w 0 ${COUNT}`
> +do
> +	outtxt="${MOUNTPOINT}/${fnamebase}.${i}.txt"
> +      	outlog="${LOGPATH}/${fnamebase}.${i}.log"
> +
> +    	${ECHO} "Creating file..."
> +   	log_run "${FILL_HOLES}" ${MMAPOPT} ${UNWOPT} -f -o "${outlog}" -i "${ITER}" "${outtxt}" "${SIZE}"
>   
why not capture the return code here?
> +
> +    	sleep 10
> +
> +    	${FUSER} -km ${MOUNTPOINT}
> +
> +    	sleep 10
> +
> +	do_umount ${MOUNTPOINT}
> +
> +#    	sleep 10
> +
> +	do_mount ${DEVICE} ${MOUNTPOINT} ${MOUNTOPTS}
> +
> +#    	sleep 10
> +
> +    	${ECHO} "Verifying..."
> +    	log_run "${VERIFY_HOLES}" "-v" "${outlog}" "${outtxt}"
> +    	RC=$?
> +
> +    	if [ ${RC} -ne 0 ]; then
> +		do_umount ${MOUNTPOINT}
> +		exit 1
> +    	fi
> +done
> +
> +do_umount ${MOUNTPOINT}
> diff --git a/programs/python_common/single_run-WIP.sh b/programs/python_common/single_run-WIP.sh
> index 50ce38c..1daaffb 100755
> --- a/programs/python_common/single_run-WIP.sh
> +++ b/programs/python_common/single_run-WIP.sh
> @@ -330,12 +330,15 @@ run_fillverifyholes()
>  	varfile=${logdir}/fillverifyholes.txt
>  
>  	${CAT} > ${varfile} <<EOF
> -2048	4096	nosparse,nounwritten,noinline-data	data=ordered
> -2048	65536	sparse,unwritten,inline-data		data=writeback
> -4096	4096	sparse,unwritten,inline-data		data=ordered
> -4096	8192	nosparse,nounwritten,noinline-data	data=writeback
> -4096	131072	nosparse,nounwritten,noinline-data	data=ordered
> -4096	1048576	sparse,unwritten,inline-data		data=writeback
> +2048	4096	nosparse,nounwritten,noinline-data	data=ordered	100000000	0	0
> +2048	65536	sparse,unwritten,inline-data		data=writeback	5000000000	-M	-U
> +4096	4096	sparse,unwritten,inline-data		data=ordered	5000000000	0	0
> +4096	4096	sparse,unwritten,inline-data		data=ordered	5000000000	-M	0
> +4096	4096	sparse,unwritten,inline-data		data=ordered	5000000000	0	-U
> +4096	4096	sparse,unwritten,inline-data		data=ordered	5000000000	-M	-U
> +4096	8192	nosparse,nounwritten,noinline-data	data=writeback	100000000	0	0
> +4096	131072	nosparse,nounwritten,noinline-data	data=ordered	100000000	-M	0
> +4096	1048576	sparse,unwritten,inline-data		data=writeback	5000000000	-M	-U
>  EOF
>  	if [ $? != 0 ]; then
>  		${ECHO} "ERROR writing ${varfile}"
> @@ -349,22 +352,29 @@ EOF
>          	clustersize=`echo ${LINE} | cut -f2 -d' '`
>          	features=`echo ${LINE} | cut -f3 -d' '`
>  		mountopts=`echo ${LINE} | cut -f4 -d' '`
> +		filesize=`echo ${LINE} | cut -f5 -d' '`
> +		mmap=`echo ${LINE} | cut -f6 -d' '`
> +		punchholes=`echo ${LINE} | cut -f7 -d' '`
> +
> +		log_start "fill_verify_holes" ${blocksize} ${clustersize} ${features} ${mountopts} ${filesize} ${mmap} ${punchholes}
> +		if [ ${mmap} = 0 ] ; then
> +			mmap=
> +		fi
>  
> -		log_start "fill_verify_holes" ${blocksize} ${clustersize} ${features} ${mountopts}
> +		if [ ${punchholes} = 0 ] ; then
> +			punchholes=
> +		fi
>  
>  		outlog=${logdir}/fillverifyholes_${i}.log
>  		ldir=${logdir}/fillverifyholes_${i}
>  		${MKDIR} -p ${ldir}
>  
>  		do_format ${blocksize} ${clustersize} ${features} ${device}
> -		do_mount ${device} ${mountpoint} ${mountopts}
> -		${MKDIR} -p ${workdir}
>  
> -		${bindir}/burn-in.sh -b ${bindir} -l ${ldir} -c 10 -d ${workdir} -i 100 -s 5000000 >${outlog} 2>&1
> +		${bindir}/fill_verify_holes.sh -i 10000 -s ${filesize} -c 2 -m ${mountpoint} -l ${ldir} \
> +				-d ${device} -o ${mountopts} ${mmap} ${punchholes} >${outlog} 2>&1
>  		RC=$?
>  
> -		do_umount ${mountpoint}
> -
>  		log_end ${RC}
>  
>  		i=$[$i+1]
> diff --git a/vendor/common/ocfs2-test.spec-generic.in b/vendor/common/ocfs2-test.spec-generic.in
> index b37e870..c298e8a 100644
> --- a/vendor/common/ocfs2-test.spec-generic.in
> +++ b/vendor/common/ocfs2-test.spec-generic.in
> @@ -92,6 +92,7 @@ rm -rf "$RPM_BUILD_ROOT"
>  %{_installdir}/bin/verify_holes
>  %{_installdir}/bin/burn-in.sh
>  %{_installdir}/bin/old_burn-in.sh
> +%{_installdir}/bin/fill_verify_holes.sh
>  %{_installdir}/bin/flock_unit_test
>  %{_installdir}/bin/run_flock_unit_test.py
>  %{_installdir}/bin/fsck-test.sh
>   




More information about the Ocfs2-test-devel mailing list