All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Hou Tao <houtao1@huawei.com>
Cc: fstests@vger.kernel.org, guaneryu@gmail.com,
	linux-xfs@vger.kernel.org, cmaiolino@redhat.com
Subject: Re: [PATCH v3 4/4] common/rc: factor out _scratch_xfs_[get|set]_sb_field
Date: Thu, 9 Nov 2017 09:02:56 -0800	[thread overview]
Message-ID: <20171109170256.GL26910@magnolia> (raw)
In-Reply-To: <20171109073252.36001-5-houtao1@huawei.com>

On Thu, Nov 09, 2017 at 03:32:52PM +0800, Hou Tao wrote:
> It's common to get and set the values of fields in XFS super block,
> so factor them out as scratch_xfs_[get|set]_sb_field, reimplement
> them based on _scratch_xfs_[get|set]_metadata_field, and update the
> related test cases accordingly.
> 
> Also move _scratch_xfs_[get|set]_metadata_field from common/fuzzy
> to common/xfs.
> 
> Signed-off-by: Hou Tao <houtao1@huawei.com>
> ---
>  common/fuzzy  | 33 ---------------------------------
>  common/xfs    | 47 +++++++++++++++++++++++++++++++++++++++++++++++
>  tests/xfs/007 |  6 ++----
>  tests/xfs/098 |  4 ++--
>  tests/xfs/186 |  3 +--
>  tests/xfs/199 | 13 ++++---------
>  tests/xfs/307 | 11 ++---------
>  tests/xfs/308 | 11 ++---------
>  tests/xfs/339 |  6 +++---
>  tests/xfs/340 |  2 +-
>  tests/xfs/999 | 14 +++-----------
>  11 files changed, 67 insertions(+), 83 deletions(-)
> 
> diff --git a/common/fuzzy b/common/fuzzy
> index 8453c29..9642809 100644
> --- a/common/fuzzy
> +++ b/common/fuzzy
> @@ -120,39 +120,6 @@ _scratch_xfs_list_metadata_fields() {
>  	_scratch_xfs_db "${cmds[@]}" -c print | __filter_xfs_db_print_fields "${filter}"
>  }
>  
> -# Get a metadata field
> -# The first arg is the field name
> -# The rest of the arguments are xfs_db commands to find the metadata.
> -_scratch_xfs_get_metadata_field() {
> -	key="$1"
> -	shift
> -
> -	grep_key="$(echo "${key}" | tr '[]()' '....')"
> -	local cmds=()
> -	for arg in "$@"; do
> -		cmds+=("-c" "${arg}")
> -	done
> -	_scratch_xfs_db "${cmds[@]}" -c "print ${key}" | grep "^${grep_key}" | \
> -		sed -e 's/^.* = //g'
> -}
> -
> -# Set a metadata field
> -# The first arg is the field name
> -# The second arg is the new value
> -# The rest of the arguments are xfs_db commands to find the metadata.
> -_scratch_xfs_set_metadata_field() {
> -	key="$1"
> -	value="$2"
> -	shift; shift
> -
> -	local cmds=()
> -	for arg in "$@"; do
> -		cmds+=("-c" "${arg}")
> -	done
> -	_scratch_xfs_db -x "${cmds[@]}" -c "write -d ${key} ${value}"
> -	echo
> -}
> -
>  # Fuzz a metadata field
>  # The first arg is the field name
>  # The second arg is the xfs_db fuzz verb
> diff --git a/common/xfs b/common/xfs
> index d4fef94..0509760 100644
> --- a/common/xfs
> +++ b/common/xfs
> @@ -599,3 +599,50 @@ _require_no_xfs_debug()
>  		_notrun "Require XFS built without CONFIG_XFS_DEBUG"
>  	fi
>  }
> +
> +# Get a metadata field
> +# The first arg is the field name
> +# The rest of the arguments are xfs_db commands to find the metadata.
> +_scratch_xfs_get_metadata_field()
> +{
> +	local key="$1"
> +	shift
> +
> +	local grep_key="$(echo "${key}" | tr '[]()' '....')"
> +	local cmds=()
> +	local arg
> +	for arg in "$@"; do
> +		cmds+=("-c" "${arg}")
> +	done
> +	_scratch_xfs_db "${cmds[@]}" -c "print ${key}" | grep "^${grep_key}" | \
> +		sed -e 's/^.* = //g'
> +}
> +
> +# Set a metadata field
> +# The first arg is the field name
> +# The second arg is the new value
> +# The rest of the arguments are xfs_db commands to find the metadata.
> +_scratch_xfs_set_metadata_field()
> +{
> +	local key="$1"
> +	local value="$2"
> +	shift; shift
> +
> +	local cmds=()
> +	local arg
> +	for arg in "$@"; do
> +		cmds+=("-c" "${arg}")
> +	done
> +	_scratch_xfs_db -x "${cmds[@]}" -c "write -d ${key} ${value}"

/me wonders if this should be "write -d ${key} -- ${value}" since I
omitted that in the initial patch.  (That could be a separate patch.)

Otherwise looks ok,
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>

--D

> +	echo
> +}
> +
> +_scratch_xfs_get_sb_field()
> +{
> +	_scratch_xfs_get_metadata_field "$1" "sb 0"
> +}
> +
> +_scratch_xfs_set_sb_field()
> +{
> +	_scratch_xfs_set_metadata_field "$1" "$2" "sb 0"
> +}
> diff --git a/tests/xfs/007 b/tests/xfs/007
> index d80d380..215bd1d 100755
> --- a/tests/xfs/007
> +++ b/tests/xfs/007
> @@ -62,10 +62,8 @@ do_test()
>  	echo "*** umount"
>  	_scratch_unmount
>  
> -	QINO_1=`xfs_db -c "sb 0" -c "p" $SCRATCH_DEV | \
> -			grep $qino_1 | awk '{print $NF}'`
> -	QINO_2=`xfs_db -c "sb 0" -c "p" $SCRATCH_DEV | \
> -			grep $qino_2 | awk '{print $NF}'`
> +	QINO_1=`_scratch_xfs_get_sb_field $qino_1`
> +	QINO_2=`_scratch_xfs_get_sb_field $qino_2`
>  
>  	echo "*** Usage before quotarm ***"
>  	_scratch_xfs_db -c "inode $QINO_1" -c "p core.nblocks"
> diff --git a/tests/xfs/098 b/tests/xfs/098
> index 7873f32..9bcd94b 100755
> --- a/tests/xfs/098
> +++ b/tests/xfs/098
> @@ -96,9 +96,9 @@ echo "+ check fs"
>  _scratch_xfs_repair -n >> $seqres.full 2>&1 || _fail "xfs_repair should not fail"
>  
>  echo "+ corrupt image"
> -logstart="$(_scratch_xfs_db -c 'sb 0' -c 'p' | grep '^logstart =' | cut -d ' ' -f 3)"
> +logstart="$(_scratch_xfs_get_sb_field logstart)"
>  logstart="$(_scratch_xfs_db -c "convert fsblock ${logstart} byte" | sed -e 's/^.*(\([0-9]*\).*$/\1/g')"
> -logblocks="$(xfs_db -c 'sb 0' -c 'p' "${SCRATCH_DEV}" | grep '^logblocks =' | cut -d ' ' -f 3)"
> +logblocks="$(_scratch_xfs_get_sb_field logblocks)"
>  $XFS_IO_PROG -f -c "pwrite -S 0x62 ${logstart} $((logblocks * blksz))" "${SCRATCH_DEV}" >> $seqres.full
>  
>  echo "+ mount image"
> diff --git a/tests/xfs/186 b/tests/xfs/186
> index 4b36ae6..a4527ed 100755
> --- a/tests/xfs/186
> +++ b/tests/xfs/186
> @@ -173,8 +173,7 @@ fi
>  
>  # set inum to root dir ino
>  # we'll add in dirents and EAs into the root directory
> -eval `_scratch_xfs_db -r -c 'sb 0' -c 'p rootino' | $SED_PROG 's/ //g'`
> -inum=$rootino
> +inum=`_scratch_xfs_get_sb_field rootino`
>  fork_dir=$SCRATCH_MNT
>  _print_inode
>  
> diff --git a/tests/xfs/199 b/tests/xfs/199
> index ee26439..a0f48ad 100755
> --- a/tests/xfs/199
> +++ b/tests/xfs/199
> @@ -49,11 +49,6 @@ _supported_os Linux
>  
>  _require_scratch
>  
> -get_features()
> -{
> -	_scratch_xfs_db -x  -c "sb" -c "print $1" | awk '// {print $3}'
> -}
> -
>  # clear any mkfs options so that we can directly specify the options we need to
>  # be able to test the features bitmask behaviour correctly.
>  MKFS_OPTIONS=
> @@ -63,8 +58,8 @@ _scratch_mkfs_xfs -m crc=0 -l lazy-count=1 >/dev/null 2>&1
>  # gives us the values the resultant tests should be the same as for testing at
>  # the end of the test. We don't hard code feature values, because that makes the
>  # test break every time we change mkfs feature defaults.
> -f2=`get_features features2`
> -bf2=`get_features bad_features2`
> +f2=`_scratch_xfs_get_sb_field features2`
> +bf2=`_scratch_xfs_get_sb_field bad_features2`
>  
>  #
>  # Now clear the normal flags
> @@ -74,7 +69,7 @@ _scratch_xfs_db -x  -c 'sb' -c 'write features2 0'
>  
>  _scratch_mount
>  _scratch_unmount
> -rwf2=`get_features features2`
> +rwf2=`_scratch_xfs_get_sb_field features2`
>  
>  #
>  # Clear the normal flags again for the second rount.
> @@ -88,7 +83,7 @@ _scratch_xfs_db -x  -c 'sb' -c 'write features2 0'
>  _scratch_mount -o ro
>  _scratch_mount -o remount,rw
>  _scratch_unmount
> -rof2=`get_features features2`
> +rof2=`_scratch_xfs_get_sb_field features2`
>  
>  [ "$f2" != "$bf2" ] && echo "mkfs: features2 $f2 != bad_features2 $bf2"
>  [ "$f2" != "$rwf2" ] && echo "mount rw: old features2 $f2 != new features2 $rwf2"
> diff --git a/tests/xfs/307 b/tests/xfs/307
> index 4ce3e66..d829524 100755
> --- a/tests/xfs/307
> +++ b/tests/xfs/307
> @@ -71,18 +71,11 @@ _set_agf_data() {
>  }
>  
>  _get_sb_data() {
> -	field="$1"
> -	shift
> -
> -	_scratch_xfs_db -c 'sb 0' "$@" -c "p $field"  | awk '{print $3}'
> +	_scratch_xfs_get_sb_field "$@"
>  }
>  
>  _set_sb_data() {
> -	field="$1"
> -	value="$2"
> -	shift; shift
> -
> -	_scratch_xfs_db -x -c 'sb 0' "$@" -c "write $field -- $value"  >> $seqres.full
> +	_scratch_xfs_set_sb_field "$@" >> $seqres.full
>  }
>  
>  _filter_leftover() {
> diff --git a/tests/xfs/308 b/tests/xfs/308
> index e9d7f76..7e7adac 100755
> --- a/tests/xfs/308
> +++ b/tests/xfs/308
> @@ -71,18 +71,11 @@ _set_agf_data() {
>  }
>  
>  _get_sb_data() {
> -	field="$1"
> -	shift
> -
> -	_scratch_xfs_db -c 'sb 0' "$@" -c "p $field"  | awk '{print $3}'
> +	_scratch_xfs_get_sb_field "$@"
>  }
>  
>  _set_sb_data() {
> -	field="$1"
> -	value="$2"
> -	shift; shift
> -
> -	_scratch_xfs_db -x -c 'sb 0' "$@" -c "write $field -- $value"  >> $seqres.full
> +	_scratch_xfs_set_sb_field "$@" >> $seqres.full
>  }
>  
>  _filter_leftover() {
> diff --git a/tests/xfs/339 b/tests/xfs/339
> index 734d47b..78b714f 100755
> --- a/tests/xfs/339
> +++ b/tests/xfs/339
> @@ -59,9 +59,9 @@ ln $SCRATCH_MNT/f3 $SCRATCH_MNT/f4
>  _scratch_unmount
>  
>  echo "Corrupt fs"
> -rrmapino=$(_scratch_xfs_db -c 'sb 0' -c 'p rrmapino' | awk '{print $3}')
> -_scratch_xfs_db -x -c 'sb 0' -c 'addr rootino' \
> -	-c "write u3.sfdir3.list[3].inumber.i4 $rrmapino" >> $seqres.full
> +rrmapino=`_scratch_xfs_get_sb_field rrmapino`
> +_scratch_xfs_set_metadata_field "u3.sfdir3.list[3].inumber.i4" $rrmapino \
> +	'sb 0' 'addr rootino' >> $seqres.full
>  _scratch_mount
>  
>  echo "Check files"
> diff --git a/tests/xfs/340 b/tests/xfs/340
> index 8cc50a2..7b1b7d1 100755
> --- a/tests/xfs/340
> +++ b/tests/xfs/340
> @@ -59,7 +59,7 @@ ino=$(stat -c '%i' $SCRATCH_MNT/f3)
>  _scratch_unmount
>  
>  echo "Corrupt fs"
> -rrmapino=$(_scratch_xfs_db -c 'sb 0' -c 'p rrmapino' | awk '{print $3}')
> +rrmapino=$(_scratch_xfs_get_sb_field rrmapino)
>  _scratch_xfs_db -x -c "inode $rrmapino" \
>  	-c 'write core.format 2' -c 'write core.size 0' \
>  	-c 'write core.nblocks 0' -c 'sb 0' -c 'addr rootino' \
> diff --git a/tests/xfs/999 b/tests/xfs/999
> index 22f7ba3..2b0b1e5 100755
> --- a/tests/xfs/999
> +++ b/tests/xfs/999
> @@ -51,14 +51,6 @@ _cleanup()
>  	_cleanup_flakey > /dev/null 2>&1
>  }
>  
> -get_xfs_scratch_sb_field()
> -{
> -	local field=$1
> -
> -	_scratch_xfs_db -r -c "sb 0" -c "print $field" | \
> -	awk -v field=$field '$0 ~ field {print $3}'
> -}
> -
>  # inject IO write error for the XFS filesystem except its log section
>  make_xfs_scratch_flakey_table()
>  {
> @@ -72,9 +64,9 @@ make_xfs_scratch_flakey_table()
>  		return
>  	fi
>  
> -	local blk_sz=$(get_xfs_scratch_sb_field blocksize)
> -	local log_ofs=$(get_xfs_scratch_sb_field logstart)
> -	local log_sz=$(get_xfs_scratch_sb_field logblocks)
> +	local blk_sz=$(_scratch_xfs_get_sb_field blocksize)
> +	local log_ofs=$(_scratch_xfs_get_sb_field logstart)
> +	local log_sz=$(_scratch_xfs_get_sb_field logblocks)
>  	local table=""
>  	local ofs=0
>  	local sz
> -- 
> 2.9.5
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2017-11-09 17:03 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-09  7:32 [PATCH v3 0/4] test for XFS umount hang caused by the pending dquota log item in AIL Hou Tao
2017-11-09  7:32 ` [PATCH v3 1/4] dmflakey: support multiple dm targets for a dm-flakey device Hou Tao
2017-11-09  8:56   ` Eryu Guan
2017-11-09  7:32 ` [PATCH v3 2/4] dmflakey: support error_writes feature for dm-flakey Hou Tao
2017-11-09  8:57   ` Eryu Guan
2017-11-09  7:32 ` [PATCH v3 3/4] xfs: test for umount hang caused by the pending dquota log item in AIL Hou Tao
2017-11-09  9:05   ` Eryu Guan
2017-12-05  0:47   ` Darrick J. Wong
2018-01-10  0:20     ` Darrick J. Wong
2017-11-09  7:32 ` [PATCH v3 4/4] common/rc: factor out _scratch_xfs_[get|set]_sb_field Hou Tao
2017-11-09 17:02   ` Darrick J. Wong [this message]
2017-11-09  8:54 ` [PATCH v3 0/4] test for XFS umount hang caused by the pending dquota log item in AIL Eryu Guan
2017-11-21 16:35   ` Carlos Maiolino
2017-11-20 15:13 ` Carlos Maiolino
2017-11-21 15:49 ` Carlos Maiolino

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171109170256.GL26910@magnolia \
    --to=darrick.wong@oracle.com \
    --cc=cmaiolino@redhat.com \
    --cc=fstests@vger.kernel.org \
    --cc=guaneryu@gmail.com \
    --cc=houtao1@huawei.com \
    --cc=linux-xfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.