[PATCH 09/10 v2] xfstests: Allow to recreate TEST_DEV
Chandra Seetharaman
sekharan at us.ibm.com
Fri Aug 2 19:13:50 CDT 2013
On Thu, 2013-07-11 at 12:38 +0200, Lukas Czerner wrote:
> Add config option RECREATE_TEST_DEV to allow to recreate file system on
> the TEST_DEV device. Permitted values are true and false.
>
> If RECREATE_TEST_DEV is set to true the TEST_DEV device will be
> unmounted and FSTYP file system will be created on it. Afterwards it
> will be mounted to TEST_DIR again with the default, or specified mount
> options.
>
> Also recreate the file system if FSTYP differs from the previous
> section.
>
> Signed-off-by: Lukas Czerner <lczerner at redhat.com>
> ---
> README.config-sections | 43 ++++++++++++++++----
> check | 33 ++++++++++++---
> common/config | 106 +++++++++++++++++++++++++++++++++++++++++++++++++
> common/rc | 26 +++++++++---
> 4 files changed, 189 insertions(+), 19 deletions(-)
>
> diff --git a/README.config-sections b/README.config-sections
> index 6d88a6f..4d60272 100644
> --- a/README.config-sections
> +++ b/README.config-sections
> @@ -5,16 +5,20 @@ Configuration file with sections is useful for running xfstests on multiple
> file systems, or multiple file system setups in a single run without any
> help of external scripts.
>
> +
> +Syntax
> +------
> +
> Syntax for defining a section is the following:
>
> -[section_name]
> + [section_name]
>
> Section name should consist of alphanumeric characters and '_'. Anything
> else is forbidden and the section will not be recognised.
>
> Each section in the configuration file should contain options in the format
>
> -OPTION=value
> + OPTION=value
> 'OPTION' must not contain any white space characters. 'value' can contain
> any character you want with one simple limitation - characters ' and " can
> @@ -24,9 +28,31 @@ Note that options are carried between sections so the same options does not
> have to be specified in each and every sections. However caution should be
> exercised not to leave unwanted options set from previous sections.
>
> +
> +Results
> +-------
> +
> For every section xfstests will run with specified options and will produce
> separate results in the '$RESULT_BASE/$section_name' directory.
Above changes can be moved to previous patch
>
> +
> +Multiple file systems
> +---------------------
> +
> +Having different file systems in different config sections is allowed. When
> +FSTYP differs in the following section the FSTYP file system will be created
> +automatically before running the test.
> +
> +Note that if MOUNT_OPTIONS, MKFS_OPTIONS, or FSCK_OPTIONS are not directly
> +specified in the section it will be reset to the default for a given file
> +system.
> +
> +You can also force the file system recreation by specifying RECREATE_TEST_DEV.
> +
> +
> +Example
> +-------
> +
This too (can be moved to previous patch).
> Here is an example of config file with sections:
>
> [ext4_4k_block_size]
> @@ -36,6 +62,7 @@ SCRATCH_DEV=/dev/sdb
> SCRATCH_MNT=/mnt/test1
> MKFS_OPTIONS="-q -F -b4096"
> FSTYP=ext4
> +RESULT_BASE="`pwd`/results/`date +%d%m%y_%H%M%S`"
This too (can be moved to previous patch).
>
> [ext4_1k_block_size]
> MKFS_OPTIONS="-q -F -b1024"
> @@ -43,8 +70,10 @@ MKFS_OPTIONS="-q -F -b1024"
> [ext4_nojournal]
> MKFS_OPTIONS="-q -F -b4096 -O ^has_journal"
>
> -[ext4_discard_ssd]
> -MKFS_OPTIONS="-q -F -b4096"
> -TEST_DEV=/dev/sdc
> -SCRATCH_DEV=/dev/sdd
> -MOUNT_OPTIONS="-o discard"
> +[xfs_filesystem]
> +MKFS_OPTIONS="-f"
> +FSTYP=xfs
> +
> +[ext3_filesystem]
> +FSTYP=ext3
> +MOUNT_OPTIONS="-o noatime"
> diff --git a/check b/check
> index 1df7a37..5775276 100755
> --- a/check
> +++ b/check
> @@ -283,8 +283,6 @@ if $have_test_arg; then
> done
> fi
>
> -_prepare_test_list
> -
> # we need common/rc
> if ! . ./common/rc
> then
> @@ -386,6 +384,8 @@ _summary()
> rm -f $tmp.*
> }
>
> +_prepare_test_list
> +
> if $OPTIONS_HAVE_SECTIONS; then
> trap "_summary; exit \$status" 0 1 2 3 15
> else
> @@ -393,8 +393,8 @@ else
> fi
>
> for section in $HOST_OPTIONS_SECTIONS; do
> + OLD_FSTYP=$FSTYP
> get_next_config $section
> - init_rc
>
> mkdir -p $RESULT_BASE
> if [ ! -d $RESULT_BASE ]; then
> @@ -402,6 +402,30 @@ for section in $HOST_OPTIONS_SECTIONS; do
> exit 1;
> fi
>
> + if $OPTIONS_HAVE_SECTIONS; then
> + echo "SECTION -- $section"
> + fi
> +
> + if $RECREATE_TEST_DEV || [ "$OLD_FSTYP" != "$FSTYP" ]; then
> + echo "RECREATING -- $FSTYP on $TEST_DEV"
> + _umount_or_remount_ro $TEST_DEV 2>&1> /dev/null
> + if ! _test_mkfs >$tmp.err 2>&1
> + then
> + echo "our local _test_mkfs routine ..."
> + cat $tmp.err
> + echo "check: failed to mkfs \$TEST_DEV using specified options"
> + exit 1
> + fi
> + out=`_mount_or_remount_rw "$MOUNT_OPTIONS" $TEST_DEV $TEST_DIR`
> + if [ $? -ne 1 ]; then
> + echo $out
> + exit 1
> + fi
> + _prepare_test_list
> + fi
> +
> + init_rc
> +
> seq="check"
> check="$RESULT_BASE/check"
>
> @@ -411,9 +435,6 @@ for section in $HOST_OPTIONS_SECTIONS; do
> [ -f $check.time ] || touch $check.time
>
> # print out our test configuration
> - if $OPTIONS_HAVE_SECTIONS; then
> - echo "SECTION -- $section"
> - fi
> echo "FSTYP -- `_full_fstyp_details`"
> echo "PLATFORM -- `_full_platform_details`"
> if [ ! -z "$SCRATCH_DEV" ]; then
> diff --git a/common/config b/common/config
> index 8011ec4..a0b650b 100644
> --- a/common/config
> +++ b/common/config
> @@ -82,6 +82,8 @@ export PWD=`pwd`
> export MALLOCLIB=${MALLOCLIB:=/usr/lib/libefence.a}
> export LOCAL_CONFIGURE_OPTIONS=${LOCAL_CONFIGURE_OPTIONS:=--enable-readline=yes}
>
> +export RECREATE_TEST_DEV=false
> +
> # $1 = prog to look for, $2* = default pathnames if not found in $PATH
> set_prog_path()
> {
> @@ -212,6 +214,91 @@ case "$HOSTOS" in
> ;;
> esac
>
> +_mount_opts()
> +{
> + # SELinux adds extra xattrs which can mess up our expected output.
> + # So, mount with a context, and they won't be created
> + # # nfs_t is a "liberal" context so we can use it.
> + if [ -x /usr/sbin/selinuxenabled ] && /usr/sbin/selinuxenabled; then
> + SELINUX_MOUNT_OPTIONS="-o context=system_u:object_r:nfs_t:s0"
> + export SELINUX_MOUNT_OPTIONS
> + fi
> +
> + case $FSTYP in
> + xfs)
> + export MOUNT_OPTIONS=$XFS_MOUNT_OPTIONS
> + ;;
> + udf)
> + export MOUNT_OPTIONS=$UDF_MOUNT_OPTIONS
> + ;;
> + nfs)
> + export MOUNT_OPTIONS=$NFS_MOUNT_OPTIONS
> + ;;
If we need to have these as default for these filesystem below (in these
scenario), shouldn't we change them to be the default for other
invocations too ?
Basically, change what is default for those filesystems and use them
directly (as xfs, udf and nfs above) here. What do you think ?
>
> + ext2|ext3|ext4|ext4dev)
> + # acls & xattrs aren't turned on by default on ext$FOO
> + export MOUNT_OPTIONS="-o acl,user_xattr $EXT_MOUNT_OPTIONS"
> + ;;
> + reiserfs)
> + # acls & xattrs aren't turned on by default on reiserfs
> + export MOUNT_OPTIONS="-o acl,user_xattr $REISERFS_MOUNT_OPTIONS"
> + ;;
> + gfs2)
> + # acls aren't turned on by default on gfs2
> + export MOUNT_OPTIONS="-o acl $GFS2_MOUNT_OPTIONS"
> + ;;
> + *)
> + ;;
> + esac
> +}
> +
> +_mkfs_opts()
> +{
> + case $FSTYP in
> + xfs)
> + export MKFS_OPTIONS=$XFS_MKFS_OPTIONS
> + ;;
Same comment as above here too
> + udf)
> + [ ! -z "$udf_fsize" ] && \
> + UDF_MKFS_OPTIONS="$UDF_MKFS_OPTIONS -s $udf_fsize"
> + export MKFS_OPTIONS=$UDF_MKFS_OPTIONS
> + ;;
> + nfs)
> + export MKFS_OPTIONS=$NFS_MKFS_OPTIONS
> + ;;
> + reiserfs)
> + export MKFS_OPTIONS="$REISERFS_MKFS_OPTIONS -q"
> + ;;
> + gfs2)
> + export MKFS_OPTIONS="$GFS2_MKFS_OPTIONS -O -p lock_nolock"
> + ;;
> + jfs)
> + export MKFS_OPTIONS="$JFS_MKFS_OPTIONS -q"
> + ;;
> + *)
> + ;;
> + esac
> +}
> +
> +_fsck_opts()
> +{
> + case $FSTYP in
> + ext2|ext3|ext4|ext4dev)
> + export FSCK_OPTIONS="-nf"
> + ;;
> + reiserfs)
> + export FSCK_OPTIONS="--yes"
> + ;;
> + *)
> + export FSCK_OPTIONS="-n"
> + ;;
> + esac
> +}
> +
> +[ -z "$FSTYP" ] && export FSTYP=xfs
> +[ -z "$MOUNT_OPTIONS" ] && _mount_opts
> +[ -z "$MKFS_OPTIONS" ] && _mkfs_opts
> +[ -z "$FSCK_OPTIONS" ] && _fsck_opts
> +
> known_hosts()
> {
> [ "$HOST_CONFIG_DIR" ] || HOST_CONFIG_DIR=`pwd`/configs
> @@ -270,8 +357,27 @@ parse_config_section() {
> }
>
> get_next_config() {
> + local OLD_FSTYP=$FSTYP
> + local OLD_MOUNT_OPTIONS=$MOUNT_OPTIONS
> + local OLD_MKFS_OPTIONS=$MKFS_OPTIONS
> + local OLD_FSCK_OPTIONS=$FSCK_OPTIONS
> +
> + unset MOUNT_OPTIONS
> + unset MKFS_OPTIONS
> + unset FSCK_OPTIONS
> +
> parse_config_section $1
>
> + if [ -n "$OLD_FSTYP" ] && [ $OLD_FSTYP != $FSTYP ]; then
> + [ -z "$MOUNT_OPTIONS" ] && _mount_opts
> + [ -z "$MKFS_OPTIONS" ] && _mkfs_opts
> + [ -z "$FSCK_OPTIONS" ] && _fsck_opts
> + else
> + [ -z "$MOUNT_OPTIONS" ] && export MOUNT_OPTIONS=$OLD_MOUNT_OPTIONS
> + [ -z "$MKFS_OPTIONS" ] && export MKFS_OPTIONS=$OLD_MKFS_OPTIONS
> + [ -z "$FSCK_OPTIONS" ] && export FSCK_OPTIONS=$OLD_FSCK_OPTIONS
> + fi
> +
> # set default RESULT_BASE
> if [ -z "$RESULT_BASE" ]; then
> export RESULT_BASE="$here/results/"
> diff --git a/common/rc b/common/rc
> index 0dd30a3..10116a6 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -152,12 +152,6 @@ _fsck_opts()
> esac
> }
>
> -[ -z "$FSTYP" ] && FSTYP=xfs
> -[ -z "$MOUNT_OPTIONS" ] && _mount_opts
> -[ -z "$MKFS_OPTIONS" ] && _mkfs_opts
> -[ -z "$FSCK_OPTIONS" ] && _fsck_opts
> -
> -
> # we need common/config
> if [ "$iam" != "check" ]
> then
> @@ -490,6 +484,7 @@ _setup_large_ext4_fs()
> fi
> return 0
> }
> +
> _scratch_mkfs_ext4()
> {
> local tmp_dir=/tmp/
> @@ -518,6 +513,24 @@ _scratch_mkfs_ext4()
> return $mkfs_status
> }
>
> +_test_mkfs()
> +{
> + case $FSTYP in
> + nfs*)
> + # do nothing for nfs
> + ;;
> + udf)
> + $MKFS_UDF_PROG $MKFS_OPTIONS $* $TEST_DEV > /dev/null
> + ;;
> + btrfs)
> + $MKFS_BTRFS_PROG $MKFS_OPTIONS $* $TEST_DEV > /dev/null
> + ;;
> + *)
> + yes | $MKFS_PROG -t $FSTYP -- $MKFS_OPTIONS $* $TEST_DEV
> + ;;
> + esac
> +}
> +
> _scratch_mkfs()
> {
> case $FSTYP in
> @@ -919,6 +932,7 @@ _supported_fs()
> _notrun "not suitable for this filesystem type: $FSTYP"
> }
>
> +
> # tests whether $FSTYP is one of the supported OSes for a test
> #
> _supported_os()
More information about the xfs
mailing list