Re: [PATCH] common/rc: add missing 'local' keywords

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



On Thu, Apr 05, 2018 at 11:31:29AM -0700, Eric Biggers wrote:
> A lot of the helper functions in xfstests are unnecessarily declaring
> variables without the 'local' keyword, which pollutes the global
> namespace and can collide with variables in tests.  Fix this for
> everything in common/rc that I could find.
> 
> Signed-off-by: Eric Biggers <ebiggers@xxxxxxxxxx>

Thanks a lot for doing this! I need some time to do careful testing, as
something can be broken implicitly, as the "$err_msg" usage below.

> ---
>  common/rc | 306 ++++++++++++++++++++++++++++--------------------------
>  1 file changed, 158 insertions(+), 148 deletions(-)
> 
> diff --git a/common/rc b/common/rc
> index 6a91850c..39e1db43 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -53,12 +53,8 @@ _require_math()
>  _math()
>  {
>  	[ $# -le 0 ] && return
> -	if [ "$BC" ]; then
> -		result=$(LANG=C echo "scale=0; $@" | "$BC" -q 2> /dev/null)
> -	else
> -		_notrun "this test requires 'bc' tool for doing math operations"
> -	fi
> -	echo "$result"
> +	_require_math

I think _require_math belongs to tests that take use of _math, not _math
itself.

> +	LANG=C echo "scale=0; $@" | "$BC" -q 2> /dev/null
>  }
>  
>  dd()
> @@ -86,22 +82,22 @@ _md5_checksum()
>  
>  # Write a byte into a range of a file
>  _pwrite_byte() {
> -	pattern="$1"
> -	offset="$2"
> -	len="$3"
> -	file="$4"
> -	xfs_io_args="$5"
> +	local pattern="$1"
> +	local offset="$2"
> +	local len="$3"
> +	local file="$4"
> +	local xfs_io_args="$5"
>  
>  	$XFS_IO_PROG $xfs_io_args -f -c "pwrite -S $pattern $offset $len" "$file"
>  }
>  
>  # mmap-write a byte into a range of a file
>  _mwrite_byte() {
> -	pattern="$1"
> -	offset="$2"
> -	len="$3"
> -	mmap_len="$4"
> -	file="$5"
> +	local pattern="$1"
> +	local offset="$2"
> +	local len="$3"
> +	local mmap_len="$4"
> +	local file="$5"
>  
>  	$XFS_IO_PROG -f -c "mmap -rw 0 $mmap_len" -c "mwrite -S $pattern $offset $len" "$file"
>  }
> @@ -127,19 +123,19 @@ fi
>  
>  _dump_err()
>  {
> -    err_msg="$*"
> +    local err_msg="$*"
>      echo "$err_msg"
>  }
>  
>  _dump_err2()
>  {
> -    err_msg="$*"
> +    local err_msg="$*"
>      >2& echo "$err_msg"
>  }
>  
>  _log_err()
>  {
> -    err_msg="$*"
> +    local err_msg="$*"

It seems the "$err_msg" in above functions need to be global,
common/report needs it set somewhere. Perhaps we can name it with a
leading underscore to indicate it's a global variable.

>      echo "$err_msg" | tee -a $seqres.full
>      echo "(see $seqres.full for details)"
>  }
> @@ -249,6 +245,8 @@ _clear_mount_stack()
>  _scratch_options()
>  {
>      local type=$1
> +    local rt_opt=""
> +    local log_opt=""
>      SCRATCH_OPTIONS=""
>  
>      if [ "$FSTYP" != "xfs" ]; then
> @@ -274,7 +272,9 @@ _scratch_options()
>  
>  _test_options()
>  {
> -    type=$1
> +    local type=$1
> +    local rt_opt=""
> +    local log_opt=""
>      TEST_OPTIONS=""
>  
>      if [ "$FSTYP" != "xfs" ]; then
> @@ -299,15 +299,15 @@ _test_options()
>  
>  _mount_ops_filter()
>  {
> -    params="$*"
> -    
> +    local params="$*"
> +    local last_index=$(( $# - 1 ))
> +
>      #get mount point to handle dmapi mtpt option correctly
> -    let last_index=$#-1
>      [ $last_index -gt 0 ] && shift $last_index
> -    FS_ESCAPED=$1
> -    
> +    local fs_escaped=$1
> +
>      echo $params | sed -e 's/dmapi/dmi/' \
> -        | $PERL_PROG -ne "s#mtpt=[^,|^\n|^\s]*#mtpt=$FS_ESCAPED\1\2#; print;"
> +        | $PERL_PROG -ne "s#mtpt=[^,|^\n|^\s]*#mtpt=$fs_escaped\1\2#; print;"
>  
>  }
>  
> @@ -506,9 +506,9 @@ _scratch_do_mkfs()
>  
>  _scratch_metadump()
>  {
> -	dumpfile=$1
> +	local dumpfile=$1
>  	shift
> -	options=
> +	local options=
>  
>  	[ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ] && \
>  		options="-l $SCRATCH_LOGDEV"
> @@ -518,7 +518,7 @@ _scratch_metadump()
>  
>  _setup_large_ext4_fs()
>  {
> -	fs_size=$1
> +	local fs_size=$1
>  	local tmp_dir=/tmp/
>  
>  	[ "$LARGE_SCRATCH_DEV" != yes ] && return 0
> @@ -527,7 +527,7 @@ _setup_large_ext4_fs()
>  
>  	# Default free space in the FS is 50GB, but you can specify more via
>  	# SCRATCH_DEV_EMPTY_SPACE
> -	space_to_consume=$(($fs_size - 50*1024*1024*1024 - $SCRATCH_DEV_EMPTY_SPACE))
> +	local space_to_consume=$(($fs_size - 50*1024*1024*1024 - $SCRATCH_DEV_EMPTY_SPACE))
>  
>  	# mount the filesystem and create 16TB - 4KB files until we consume
>  	# all the necessary space.
> @@ -541,8 +541,8 @@ _setup_large_ext4_fs()
>  	fi
>  	rm -f $tmp_dir/mnt.err
>  
> -	file_size=$((16*1024*1024*1024*1024 - 4096))
> -	nfiles=0
> +	local file_size=$((16*1024*1024*1024*1024 - 4096))
> +	local nfiles=0
>  	while [ $space_to_consume -gt $file_size ]; do
>  
>  		xfs_io -F -f \
> @@ -593,7 +593,7 @@ _scratch_mkfs_ext4()
>  
>  	if [ $mkfs_status -eq 0 -a "$LARGE_SCRATCH_DEV" = yes ]; then
>  		# manually parse the mkfs output to get the fs size in bytes
> -		fs_size=`cat $tmp.mkfsstd | awk ' \
> +		local fs_size=`cat $tmp.mkfsstd | awk ' \
>  			/^Block size/ { split($2, a, "="); bs = a[2] ; } \
>  			/ inodes, / { blks = $3 } \
>  			/reserved for the super user/ { resv = $1 } \
> @@ -929,8 +929,9 @@ _free_memory_bytes()
>  # _scratch_mkfs_sized <size in bytes> [optional blocksize]
>  _scratch_mkfs_sized()
>  {
> -    fssize=$1
> -    blocksize=$2
> +    local fssize=$1
> +    local blocksize=$2
> +    local def_blksz
>  
>      case $FSTYP in
>      xfs)
> @@ -948,7 +949,7 @@ _scratch_mkfs_sized()
>      [ -z "$blocksize" ] && blocksize=4096
>  
>  
> -    re='^[0-9]+$'
> +    local re='^[0-9]+$'
>      if ! [[ $fssize =~ $re ]] ; then
>          _notrun "error: _scratch_mkfs_sized: fs size \"$fssize\" not an integer."
>      fi
> @@ -956,10 +957,10 @@ _scratch_mkfs_sized()
>          _notrun "error: _scratch_mkfs_sized: block size \"$blocksize\" not an integer."
>      fi
>  
> -    blocks=`expr $fssize / $blocksize`
> +    local blocks=`expr $fssize / $blocksize`
>  
>      if [ "$HOSTOS" == "Linux" -a -b "$SCRATCH_DEV" ]; then
> -	devsize=`blockdev --getsize64 $SCRATCH_DEV`
> +	local devsize=`blockdev --getsize64 $SCRATCH_DEV`
>  	[ "$fssize" -gt "$devsize" ] && _notrun "Scratch device too small"
>      fi
>  
> @@ -982,12 +983,12 @@ _scratch_mkfs_sized()
>  	# filesystem, which will cause mkfs.gfs2 to fail.  Until that's fixed,
>  	# shrink the journal size to at most one eigth of the filesystem and at
>  	# least 8 MiB, the minimum size allowed.
> -	MIN_JOURNAL_SIZE=8
> -	DEFAULT_JOURNAL_SIZE=128
> -	if (( fssize/8 / (1024*1024) < DEFAULT_JOURNAL_SIZE )); then
> -	    (( JOURNAL_SIZE = fssize/8 / (1024*1024) ))
> -	    (( JOURNAL_SIZE >= MIN_JOURNAL_SIZE )) || JOURNAL_SIZE=$MIN_JOURNAL_SIZE
> -	    MKFS_OPTIONS="-J $JOURNAL_SIZE $MKFS_OPTIONS"
> +	local min_journal_size=8
> +	local default_journal_size=128
> +	if (( fssize/8 / (1024*1024) < default_journal_size )); then
> +	    local journal_size=$(( fssize/8 / (1024*1024) ))
> +	    (( journal_size >= min_journal_size )) || journal_size=$min_journal_size
> +	    MKFS_OPTIONS="-J $journal_size $MKFS_OPTIONS"
>  	fi
>  	${MKFS_PROG}.$FSTYP $MKFS_OPTIONS -O -b $blocksize $SCRATCH_DEV $blocks
>  	;;
> @@ -1015,11 +1016,11 @@ _scratch_mkfs_sized()
>  	;;
>      f2fs)
>  	# mkfs.f2fs requires # of sectors as an input for the size
> -	sector_size=`blockdev --getss $SCRATCH_DEV`
> +	local sector_size=`blockdev --getss $SCRATCH_DEV`
>  	$MKFS_F2FS_PROG $MKFS_OPTIONS $SCRATCH_DEV `expr $fssize / $sector_size`
>  	;;
>      tmpfs)
> -	free_mem=`_free_memory_bytes`
> +	local free_mem=`_free_memory_bytes`
>  	if [ "$free_mem" -lt "$fssize" ] ; then
>  	   _notrun "Not enough memory ($free_mem) for tmpfs with $fssize bytes"
>  	fi
> @@ -1035,13 +1036,13 @@ _scratch_mkfs_sized()
>  # _scratch_mkfs_geom <sunit bytes> <swidth multiplier> [optional blocksize]
>  _scratch_mkfs_geom()
>  {
> -    sunit_bytes=$1
> -    swidth_mult=$2
> -    blocksize=$3
> +    local sunit_bytes=$1
> +    local swidth_mult=$2
> +    local blocksize=$3
>      [ -z "$blocksize" ] && blocksize=4096
>  
> -    let sunit_blocks=$sunit_bytes/$blocksize
> -    let swidth_blocks=$sunit_blocks*$swidth_mult
> +    local sunit_blocks=$(( sunit_bytes / blocksize ))
> +    local swidth_blocks=$(( sunit_blocks * swidth_mult ))
>  
>      case $FSTYP in
>      xfs)
> @@ -1061,9 +1062,9 @@ _scratch_mkfs_geom()
>  # _scratch_mkfs_blocksized blocksize
>  _scratch_mkfs_blocksized()
>  {
> -    blocksize=$1
> +    local blocksize=$1
>  
> -    re='^[0-9]+$'
> +    local re='^[0-9]+$'
>      if ! [[ $blocksize =~ $re ]] ; then
>          _notrun "error: _scratch_mkfs_sized: block size \"$blocksize\" not an integer."
>      fi
> @@ -1107,7 +1108,7 @@ _repair_scratch_fs()
>      case $FSTYP in
>      xfs)
>          _scratch_xfs_repair "$@" 2>&1
> -	res=$?
> +	local res=$?
>  	if [ "$res" -ne 0 ]; then
>  		echo "xfs_repair returns $res; replay log?"
>  		_try_scratch_mount
> @@ -1130,7 +1131,7 @@ _repair_scratch_fs()
>      *)
>          # Let's hope fsck -y suffices...
>          fsck -t $FSTYP -y $SCRATCH_DEV 2>&1
> -	res=$?
> +	local res=$?
>  	case $res in
>  	0|1|2)
>  		res=0
> @@ -1317,7 +1318,7 @@ _is_block_dev()
>  	exit 1
>      fi
>  
> -    _dev=$1
> +    local _dev=$1

A 'local' variable could drop the leading underscore then.

>      if [ -L "${_dev}" ]; then
>          _dev=`readlink -f "${_dev}"`
>      fi
> @@ -1336,7 +1337,7 @@ _is_char_dev()
>  		exit 1
>  	fi
>  
> -	_dev=$1
> +	local _dev=$1

Same here.

>  	if [ -L "${_dev}" ]; then
>  		_dev=`readlink -f "${_dev}"`
>  	fi
> @@ -1359,10 +1360,10 @@ _is_char_dev()
>  _do()
>  {
>      if [ $# -eq 1 ]; then
> -	_cmd=$1
> +	local _cmd=$1
>      elif [ $# -eq 2 ]; then
> -	_note=$1
> -	_cmd=$2
> +	local _note=$1
> +	local _cmd=$2

Same here.

>  	echo -n "$_note... "
>      else
>  	echo "Usage: _do [note] cmd" 1>&2
> @@ -1370,7 +1371,8 @@ _do()
>      fi
>  
>      (eval "echo '---' \"$_cmd\"") >>$seqres.full
> -    (eval "$_cmd") >$tmp._out 2>&1; ret=$?
> +    (eval "$_cmd") >$tmp._out 2>&1
> +    local ret=$?
>      cat $tmp._out | _fix_malloc >>$seqres.full
>      rm -f $tmp._out
>      if [ $# -eq 2 ]; then
> @@ -1420,6 +1422,8 @@ _fail()
>  #
>  _supported_fs()
>  {
> +    local f
> +
>      for f
>      do
>  	if [ "$f" = "$FSTYP" -o "$f" = "generic" ]
> @@ -1436,6 +1440,8 @@ _supported_fs()
>  #
>  _supported_os()
>  {
> +    local h
> +
>      for h
>      do
>  	if [ "$h" = "$HOSTOS" ]
> @@ -1800,14 +1806,14 @@ _require_no_realtime()
>  _require_command()
>  {
>  	if [ $# -eq 2 ]; then
> -		_name="$2"
> +		local _name="$2"
>  	elif [ $# -eq 1 ]; then
> -		_name="$1"
> +		local _name="$1"
>  	else
>  		_fail "usage: _require_command <command> [<name>]"
>  	fi
>  
> -	_command=`echo "$1" | awk '{ print $1 }'`
> +	local _command=`echo "$1" | awk '{ print $1 }'`

Same here.

>  	if [ ! -x "$_command" ]; then
>  		_notrun "$_name utility required, skipped this test"
>  	fi
> @@ -1857,7 +1863,7 @@ _require_sane_bdev_flush()
>  # this test requires a specific device mapper target
>  _require_dm_target()
>  {
> -	_target=$1
> +	local _target=$1

Same here.

I'll test other changes on different $FSTYP.

Thanks,
Eryu

>  
>  	# require SCRATCH_DEV to be a valid block device with sane BLKFLSBUF
>  	# behaviour
> @@ -1947,8 +1953,8 @@ _require_aiodio()
>  #
>  _require_test_program()
>  {
> -    SRC_TEST=src/$1
> -    [ -x $SRC_TEST ] || _notrun "$SRC_TEST not built"
> +    local prog=src/$1
> +    [ -x $prog ] || _notrun "$prog not built"
>  }
>  
>  # run an aio-dio program
> @@ -1992,7 +1998,7 @@ _require_y2038()
>  
>  _filesystem_timestamp_range()
>  {
> -	device=${1:-$TEST_DEV}
> +	local device=${1:-$TEST_DEV}
>  	case $FSTYP in
>  	ext4)
>  		if [ $(dumpe2fs -h $device 2>/dev/null | grep "Inode size:" | cut -d: -f2) -gt 128 ]; then
> @@ -2097,13 +2103,14 @@ _require_xfs_io_command()
>  	local param_checked=0
>  	local opts=""
>  
> -	testfile=$TEST_DIR/$$.xfs_io
> +	local testfile=$TEST_DIR/$$.xfs_io
> +	local testio
>  	case $command in
>  	"chproj")
>  		testio=`$XFS_IO_PROG -F -f -c "chproj 0" $testfile 2>&1`
>  		;;
>  	"copy_range")
> -		testcopy=$TEST_DIR/$$.copy.xfs_io
> +		local testcopy=$TEST_DIR/$$.copy.xfs_io
>  		$XFS_IO_PROG -F -f -c "pwrite 0 4k" $testfile > /dev/null 2>&1
>  		testio=`$XFS_IO_PROG -F -f -c "copy_range $testfile" $testcopy 2>&1`
>  		rm -f $testcopy > /dev/null 2>&1
> @@ -2211,7 +2218,7 @@ _require_odirect()
>  			_notrun "ext4 data journaling doesn't support O_DIRECT"
>  		fi
>  	fi
> -	testfile=$TEST_DIR/$$.direct
> +	local testfile=$TEST_DIR/$$.direct
>  	$XFS_IO_PROG -F -f -d -c "pwrite 0 20k" $testfile > /dev/null 2>&1
>  	if [ $? -ne 0 ]; then
>  		_notrun "O_DIRECT is not supported"
> @@ -2245,13 +2252,13 @@ _require_scratch_swapfile()
>  #
>  _require_fs_space()
>  {
> -	MNT=$1
> -	BLOCKS=$2	# in units of 1024
> -	let GB=$BLOCKS/1024/1024
> +	local mnt=$1
> +	local blocks=$2	# in units of 1024
> +	local gb=$(( blocks / 1024 / 1024 ))
>  
> -	FREE_BLOCKS=`df -kP $MNT | grep -v Filesystem | awk '{print $4}'`
> -	[ $FREE_BLOCKS -lt $BLOCKS ] && \
> -		_notrun "This test requires at least ${GB}GB free on $MNT to run"
> +	local free_blocks=`df -kP $mnt | grep -v Filesystem | awk '{print $4}'`
> +	[ $free_blocks -lt $blocks ] && \
> +		_notrun "This test requires at least ${gb}GB free on $mnt to run"
>  }
>  
>  #
> @@ -2418,8 +2425,8 @@ _remount()
>  	echo "Usage: _remount device ro/rw" 1>&2
>  	exit 1
>      fi
> -    device=$1
> -    mode=$2
> +    local device=$1
> +    local mode=$2
>  
>      if ! mount -o remount,$mode $device
>      then
> @@ -2445,8 +2452,8 @@ _umount_or_remount_ro()
>  	exit 1
>      fi
>  
> -    device=$1
> -    mountpoint=`_is_dev_mounted $device`
> +    local device=$1
> +    local mountpoint=`_is_dev_mounted $device`
>  
>      if [ $USE_REMOUNT -eq 0 ]; then
>          $UMOUNT_PROG $device
> @@ -2462,9 +2469,9 @@ _mount_or_remount_rw()
>  		echo "Usage: _mount_or_remount_rw <opts> <dev> <mnt>" 1>&2
>  		exit 1
>  	fi
> -	mount_opts=$1
> -	device=$2
> -	mountpoint=$3
> +	local mount_opts=$1
> +	local device=$2
> +	local mountpoint=$3
>  
>  	if [ $USE_REMOUNT -eq 0 ]; then
>  		if [ "$FSTYP" != "overlay" ]; then
> @@ -2492,16 +2499,16 @@ _mount_or_remount_rw()
>  #
>  _check_generic_filesystem()
>  {
> -    device=$1
> +    local device=$1
>  
>      # If type is set, we're mounted
> -    type=`_fs_type $device`
> -    ok=1
> +    local type=`_fs_type $device`
> +    local ok=1
>  
>      if [ "$type" = "$FSTYP" ]
>      then
>          # mounted ...
> -        mountpoint=`_umount_or_remount_ro $device`
> +        local mountpoint=`_umount_or_remount_ro $device`
>      fi
>  
>      fsck -t $FSTYP $FSCK_OPTIONS $device >$tmp.fsck 2>&1
> @@ -2566,16 +2573,15 @@ _check_udf_filesystem()
>  	return
>      fi
>  
> -    device=$1
> -    if [ $# -eq 2 ];
> -    then
> -        LAST_BLOCK=`expr \( $2 - 1 \)`
> -        OPT_ARG="-lastvalidblock $LAST_BLOCK"
> +    local device=$1
> +    local opt_arg=""
> +    if [ $# -eq 2 ]; then
> +	opt_arg="-lastvalidblock $(( $2 - 1 ))"
>      fi
>  
>      rm -f $seqres.checkfs
>      sleep 1 # Due to a problem with time stamps in udf_test
> -    $here/src/udf_test $OPT_ARG $device | tee $seqres.checkfs | egrep "Error|Warning" | \
> +    $here/src/udf_test $opt_arg $device | tee $seqres.checkfs | egrep "Error|Warning" | \
>  	_udf_test_known_error_filter | \
>  	egrep -iv "Error count:.*[0-9]+.*total occurrences:.*[0-9]+|Warning count:.*[0-9]+.*total occurrences:.*[0-9]+" && \
>          echo "Warning UDF Verifier reported errors see $seqres.checkfs." && return 1
> @@ -2628,20 +2634,20 @@ _check_test_fs()
>  
>  _check_scratch_fs()
>  {
> -    device=$SCRATCH_DEV
> +    local device=$SCRATCH_DEV
>      [ $# -eq 1 ] && device=$1
>  
>      case $FSTYP in
>      xfs)
> -	SCRATCH_LOG="none"
> -	SCRATCH_RT="none"
> +	local scratch_log="none"
> +	local scratch_rt="none"
>  	[ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ] && \
> -	    SCRATCH_LOG="$SCRATCH_LOGDEV"
> +	    scratch_log="$SCRATCH_LOGDEV"
>  
>  	[ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_RTDEV" ] && \
> -	    SCRATCH_RT="$SCRATCH_RTDEV"
> +	    scratch_rt="$SCRATCH_RTDEV"
>  
> -	_check_xfs_filesystem $device $SCRATCH_LOG $SCRATCH_RT
> +	_check_xfs_filesystem $device $scratch_log $scratch_rt
>  	;;
>      udf)
>  	_check_udf_filesystem $device $udf_fsize
> @@ -2704,10 +2710,10 @@ _full_fstyp_details()
>  
>  _full_platform_details()
>  {
> -     os=`uname -s`
> -     host=`hostname -s`
> -     kernel=`uname -r`
> -     platform=`uname -m`
> +     local os=`uname -s`
> +     local host=`hostname -s`
> +     local kernel=`uname -r`
> +     local platform=`uname -m`
>       echo "$os/$platform $host $kernel"
>  }
>  
> @@ -2723,8 +2729,8 @@ _get_os_name()
>  
>  _link_out_file_named()
>  {
> -	export FEATURES=$2
> -	SUFFIX=$(perl -e '
> +	local features=$2
> +	local suffix=$(FEATURES="$features" perl -e '
>  		my %feathash;
>  		my $feature, $result, $suffix, $opts;
>  
> @@ -2751,22 +2757,23 @@ _link_out_file_named()
>  		print $result
>  		' <$seqfull.cfg)
>  	rm -f $1
> -	SRC=$(basename $1)
> -	ln -fs $SRC.$SUFFIX $1
> +	ln -fs $(basename $1).$suffix $1
>  }
>  
>  _link_out_file()
>  {
> +	local features
> +
>  	if [ $# -eq 0 ]; then
> -		FEATURES="$(_get_os_name)"
> +		features="$(_get_os_name)"
>  		if [ -n "$MOUNT_OPTIONS" ]; then
> -			FEATURES=$FEATURES,${MOUNT_OPTIONS##"-o "}
> +			features=$features,${MOUNT_OPTIONS##"-o "}
>  		fi
>  	else
> -		FEATURES=$1
> +		features=$1
>  	fi
>  
> -	_link_out_file_named $seqfull.out "$FEATURES"
> +	_link_out_file_named $seqfull.out "$features"
>  }
>  
>  _die()
> @@ -2784,10 +2791,10 @@ _ddt()
>  #takes files, randomdata
>  _nfiles()
>  {
> -        f=0
> +        local f=0
>          while [ $f -lt $1 ]
>          do
> -                file=f$f
> +                local file=f$f
>                  echo > $file
>                  if [ $size -gt 0 ]; then
>                      if [ "$2" == "false" ]; then
> @@ -2805,18 +2812,18 @@ _nfiles()
>  # takes dirname, depth, randomdata
>  _descend()
>  {
> -        dirname=$1; depth=$2; randomdata=$3
> +        local dirname=$1 depth=$2 randomdata=$3
>          mkdir $dirname  || die "mkdir $dirname failed"
>          cd $dirname
>  
>          _nfiles $files $randomdata          # files for this dir and data type
>  
>          [ $depth -eq 0 ] && return
> -	let deep=$depth-1 # go 1 down
> +        local deep=$(( depth - 1 )) # go 1 down
>  
>          [ $verbose = true ] && echo "descending, depth from leaves = $deep"
>  
> -        d=0
> +        local d=0
>          while [ $d -lt $dirs ]
>          do
>                  _descend d$d $deep &
> @@ -2831,14 +2838,15 @@ _descend()
>  #
>  _populate_fs()
>  {
> -    here=`pwd`
> -    dirs=5          # ndirs in each subdir till leaves
> -    size=0          # sizeof files in K
> -    files=100       # num files in _each_ subdir
> -    depth=2         # depth of tree from root to leaves
> -    verbose=false
> -    root=root       # path of initial root of directory tree
> -    randomdata=false # -x data type urandom, zero or compressible
> +    local here=`pwd`
> +    local dirs=5          # ndirs in each subdir till leaves
> +    local size=0          # sizeof files in K
> +    local files=100       # num files in _each_ subdir
> +    local depth=2         # depth of tree from root to leaves
> +    local verbose=false
> +    local root=root       # path of initial root of directory tree
> +    local randomdata=false # -x data type urandom, zero or compressible
> +    local c
>  
>      OPTIND=1
>      while getopts "d:f:n:r:s:v:x:c" c
> @@ -2867,8 +2875,8 @@ _populate_fs()
>  #
>  _test_inode_flag()
>  {
> -	flag=$1
> -	file=$2
> +	local flag=$1
> +	local file=$2
>  
>  	if $XFS_IO_PROG -r -c 'lsattr -v' "$file" | grep -q "$flag" ; then
>  		return 0
> @@ -2880,8 +2888,8 @@ _test_inode_flag()
>  #
>  _test_inode_extsz()
>  {
> -	file=$1
> -	blocks=""
> +	local file=$1
> +	local blocks=""
>  
>  	blocks=`$XFS_IO_PROG -r -c 'stat' "$file" | \
>  		awk '/^xattr.extsize =/ { print $3 }'`
> @@ -2971,7 +2979,7 @@ _require_deletable_scratch_dev_pool()
>  # Check that fio is present, and it is able to execute given jobfile
>  _require_fio()
>  {
> -	job=$1
> +	local job=$1
>  
>  	_require_command "$FIO_PROG" fio
>  	if [ -z "$1" ]; then
> @@ -2986,7 +2994,7 @@ _require_fio()
>  _require_freeze()
>  {
>  	xfs_freeze -f "$TEST_DIR" >/dev/null 2>&1
> -	result=$? 
> +	local result=$?
>  	xfs_freeze -u "$TEST_DIR" >/dev/null 2>&1
>  	[ $result -eq 0 ] || _notrun "$FSTYP does not support freezing"
>  }
> @@ -3061,9 +3069,9 @@ _require_norecovery()
>  _require_metadata_journaling()
>  {
>  	if [ -z $1 ]; then
> -		DEV=$TEST_DEV
> +		local dev=$TEST_DEV
>  	else
> -		DEV=$1
> +		local dev=$1
>  	fi
>  
>  	case "$FSTYP" in
> @@ -3073,8 +3081,8 @@ _require_metadata_journaling()
>  	ext4)
>  		# ext4 could be mkfs'd without a journal...
>  		_require_dumpe2fs
> -		$DUMPE2FS_PROG -h $DEV 2>&1 | grep -q has_journal || \
> -			_notrun "$FSTYP on $DEV not configured with metadata journaling"
> +		$DUMPE2FS_PROG -h $dev 2>&1 | grep -q has_journal || \
> +			_notrun "$FSTYP on $dev not configured with metadata journaling"
>  		# ext4 might not load a journal
>  		_exclude_scratch_mount_option "noload"
>  		;;
> @@ -3140,10 +3148,12 @@ _devmgt_add()
>  	echo ${tdl} >  /sys/class/scsi_host/host${h}/scan || _fail "Add disk failed"
>  
>  	# ensure the device comes online
> -	dev_back_oneline=0
> +	local dev_back_oneline=0
> +	local i
>  	for i in `seq 1 10`; do
>  		if [ -d /sys/class/scsi_device/${1}/device/block ]; then
> -			dev=`ls /sys/class/scsi_device/${1}/device/block`
> +			local dev=`ls /sys/class/scsi_device/${1}/device/block`
> +			local j
>  			for j in `seq 1 10`;
>  			do
>  				stat /dev/$dev > /dev/null 2>&1
> @@ -3257,20 +3267,20 @@ _require_userns()
>  
>  _create_loop_device()
>  {
> -	file=$1
> +	local file=$1 dev
>  	dev=`losetup -f --show $file` || _fail "Cannot assign $file to a loop device"
>  	echo $dev
>  }
>  
>  _destroy_loop_device()
>  {
> -	dev=$1
> +	local dev=$1
>  	losetup -d $dev || _fail "Cannot destroy loop device $dev"
>  }
>  
>  _scale_fsstress_args()
>  {
> -    args=""
> +    local args=""
>      while [ $# -gt 0 ]; do
>          case "$1" in
>              -n) args="$args $1 $(($2 * $TIME_FACTOR))"; shift ;;
> @@ -3288,7 +3298,7 @@ _scale_fsstress_args()
>  #
>  _min_dio_alignment()
>  {
> -    dev=$1
> +    local dev=$1
>  
>      if [ -b "$dev" ]; then
>          blockdev --getss $dev
> @@ -3305,8 +3315,8 @@ run_check()
>  
>  _require_test_symlinks()
>  {
> -	target=`mktemp -p $TEST_DIR`
> -	link=`mktemp -p $TEST_DIR -u`
> +	local target=`mktemp -p $TEST_DIR`
> +	local link=`mktemp -p $TEST_DIR -u`
>  	ln -s `basename $target` $link
>  	if [ "$?" -ne 0 ]; then
>  		rm -f $target
> @@ -3336,7 +3346,7 @@ _require_ofd_locks()
>  
>  _require_test_lsattr()
>  {
> -	testio=$(lsattr -d $TEST_DIR 2>&1)
> +	local testio=$(lsattr -d $TEST_DIR 2>&1)
>  	echo $testio | grep -q "Operation not supported" && \
>  		_notrun "lsattr not supported by test filesystem type: $FSTYP"
>  	echo $testio | grep -q "Inappropriate ioctl for device" && \
> @@ -3353,9 +3363,9 @@ _require_chattr()
>  
>  	touch $TEST_DIR/syscalltest
>  	chattr "+$attribute" $TEST_DIR/syscalltest > $TEST_DIR/syscalltest.out 2>&1
> -	status=$?
> +	local ret=$?
>  	chattr "-$attribute" $TEST_DIR/syscalltest > $TEST_DIR/syscalltest.out 2>&1
> -	if [ "$status" -ne 0 ]; then
> +	if [ "$ret" -ne 0 ]; then
>  		_notrun "file system doesn't support chattr +$attribute"
>  	fi
>  	cat $TEST_DIR/syscalltest.out >> $seqres.full
> @@ -3462,7 +3472,7 @@ _check_dmesg()
>  	# default filter is a simple cat command, caller could provide a
>  	# customized filter and pass the name through the first argument, to
>  	# filter out intentional WARNINGs or Oopses
> -	filter=${1:-cat}
> +	local filter=${1:-cat}
>  
>  	_dmesg_since_test_start | $filter >$seqres.dmesg
>  	egrep -q -e "kernel BUG at" \
> @@ -3680,7 +3690,7 @@ get_page_size()
>  run_fsx()
>  {
>  	echo fsx $@
> -	args=`echo $@ | sed -e "s/ BSIZE / $bsize /g" -e "s/ PSIZE / $psize /g"`
> +	local args=`echo $@ | sed -e "s/ BSIZE / $bsize /g" -e "s/ PSIZE / $psize /g"`
>  	set -- $here/ltp/fsx $args $FSX_AVOID $TEST_DIR/junk
>  	echo "$@" >>$seqres.full
>  	rm -f $TEST_DIR/junk
> -- 
> 2.17.0.484.g0c8726318c-goog
> 
> --
> To unsubscribe from this list: send the line "unsubscribe fstests" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe fstests" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux