xfs
[Top] [All Lists]

Re: [PATCH 2/3] xfstests: btrfs/022: test sysfs exports of allocation an

To: xfs@xxxxxxxxxxx
Subject: Re: [PATCH 2/3] xfstests: btrfs/022: test sysfs exports of allocation and device membership info
From: Jeff Mahoney <jeffm@xxxxxxxx>
Date: Mon, 28 Oct 2013 16:17:56 -0400
Cc: jbacik@xxxxxxxxxxxx, linux-btrfs@xxxxxxxxxxxxxxx
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <20131028195242.496745223@xxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References: <20131028195204.611287480@xxxxxxxxxxxxxxxxxxxxxxxxxxxxx> <20131028195242.496745223@xxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:24.0) Gecko/20100101 Thunderbird/24.0.1
On 10/28/13, 3:52 PM, Jeff Mahoney wrote:
> This tests the sysfs publishing for btrfs allocation and device
> membership info under a number of different layouts, similar to the
> btrfs replace test. We test the allocation files only for existence and
> that they contain numerical values. We test the device membership
> by mapping the devices used to create the file system to sysfs paths
> and matching them against the paths used for the device membership
> symlinks.
> 
> Since this is a new feature, it passes on kernels without
> a /sys/fs/btrfs/<fsid> directory.
> 
> Signed-off-by: Jeff Mahoney <jeffm@xxxxxxxx>
> ---
>  common/config       |    1 +
>  tests/btrfs/022     |  190 
> +++++++++++++++++++++++++++++++++++++++++++++++++++
>  tests/btrfs/022.out |    2 +
>  3 files changed, 193 insertions(+), 0 deletions(-)
>  create mode 100755 tests/btrfs/022
>  create mode 100644 tests/btrfs/022.out
> 
> Index: xfstests/common/config
> ===================================================================
> --- xfstests.orig/common/config
> +++ xfstests/common/config
> @@ -209,6 +209,7 @@ case "$HOSTOS" in
>          export MKFS_UDF_PROG="`set_prog_path mkudffs`"
>          export MKFS_BTRFS_PROG="`set_btrfs_mkfs_prog_path_with_opts`"
>          export BTRFS_UTIL_PROG="`set_prog_path btrfs`"
> +        export UDEVADM_PROG="`set_prog_path udevadm`"
>          export BTRFS_SHOW_SUPER_PROG="`set_prog_path btrfs-show-super`"
>          export XFS_FSR_PROG="`set_prog_path xfs_fsr`"
>          export MKFS_NFS_PROG="false"
> Index: xfstests/tests/btrfs/022
> ===================================================================
> --- /dev/null
> +++ xfstests/tests/btrfs/022
> @@ -0,0 +1,190 @@
> +#! /bin/bash
> +# FS QA Test No. 022
> +#
> +# Test of the btrfs sysfs publishing
> +#
> +#-----------------------------------------------------------------------
> +# Copyright (C) 2013 SUSE.  All rights reserved.
> +#
> +# This program is free software; you can redistribute it and/or
> +# modify it under the terms of the GNU General Public License as
> +# published by the Free Software Foundation.
> +#
> +# This program is distributed in the hope that it would be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write the Free Software Foundation,
> +# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
> +#
> +#-----------------------------------------------------------------------
> +#
> +
> +seq=`basename $0`
> +seqres=$RESULT_DIR/$seq
> +echo "QA output created by $seq"
> +
> +here=`pwd`
> +tmp=/tmp/$$
> +status=1
> +
> +# get standard environment, filters and checks
> +. ./common/rc
> +. ./common/filter
> +
> +# real QA test starts here
> +_need_to_be_root
> +_supported_fs btrfs
> +_require_scratch
> +_require_scratch_dev_pool
> +_require_command $UDEVADM_PROG
> +
> +rm -f $seqres.full
> +rm -f $tmp.tmp
> +
> +check_file() {
> +     local file=$1
> +     base="$(echo "$file" | sed -e 's#/sys/fs/btrfs/[0-9a-f-][0-9a-f-]*/##')"
> +     if [ ! -f "$file" ]; then
> +             echo "$base missing."
> +             return 0
> +     else
> +             value="$(cat $file)"
> +             if [ -n "$(echo $value | tr -d 0-9)" ]; then
> +                     echo "ERROR: $base: numerical value expected" \
> +                          "(got $value)"
> +                     return 0
> +             fi
> +     fi
> +     return 1
> +}
> +
> +check_chunk() {
> +     path=$1
> +     mkfs_options=$2
> +     error=false
> +
> +     chunktype=$(basename $path)
> +     if [ ! -d "$path" ]; then
> +             echo "No $chunktype directory."
> +             exit 1
> +     fi
> +
> +     for file in bytes_may_use bytes_pinned bytes_reserved bytes_used \
> +                 disk_total flags total_bytes total_bytes_pinned; do
> +             if check_file "$path/$file"; then
> +                     error=true
> +             fi
> +     done
> +
> +     if [ "$chunktype" = "data" -o "$chunktype" = "mixed" ]; then
> +             opt="-d"
> +     elif [ "$chunktype" = "metadata" -o "$chunktype" = "system" ]; then
> +             opt="-m"
> +     fi
> +
> +     profile=$(echo $mkfs_options | sed -e "s/.*$opt \([[:alnum:]]*\).*/\1/")
> +     if [ ! -d "$path/$profile" ]; then
> +             echo "No $profile dir for $chunktype"
> +             exit 1
> +     fi
> +
> +     for file in total_bytes used_bytes; do
> +             if check_file $path/$profile/$file; then
> +                     error=true
> +             fi
> +     done
> +
> +     $error && exit 1
> +}
> +
> +check_dev_link() {
> +     local dev=$1
> +     DEV="/sys/$($UDEVADM_PROG info --query=path $dev)"
> +     DEV="$(readlink -f $DEV)"
> +     found=false
> +     for link in $sysfs_base/devices/*; do
> +             LINK="$(readlink -f $link)"
> +             if [ "$LINK" = "$DEV" ]; then
> +                     found=true
> +                     break
> +             fi
> +     done
> +     if ! $found; then
> +             echo "Symlink for $dev missing in $sysfs_base/devices"
> +             return 1
> +     fi
> +     return 0
> +}
> +
> +workout()
> +{
> +     local mkfs_options="$1"
> +     local num_devs4raid="$2"
> +     local fssize
> +
> +     if [ "`echo $SCRATCH_DEV_POOL | wc -w`" -lt $num_devs4raid ]; then
> +             echo "Skip workout $1 $2 $3 $4"
> +             echo "Too few devices in SCRATCH_DEV_POOL $SCRATCH_DEV_POOL," \
> +                  "required: $num_devs4raid"
> +             echo "Skip workout $1 $2 $3 $4" >> $seqres.full
> +             echo "Too few devices in SCRATCH_DEV_POOL $SCRATCH_DEV_POOL," \
> +                  "required: $num_devs4raid" >> $seqres.full
> +             return 0
> +     fi
> +
> +     used_devs=$(echo $SCRATCH_DEV_POOL|tr '\t' ' '| \
> +                 cut -d ' ' -f 1-$num_devs4raid)
> +
> +     _scratch_mkfs $mkfs_options $used_devs >> $seqres.full 2>&1 || \
> +     _fail "mkfs failed"
> +
> +     _scratch_mount
> +
> +     # Check allocation
> +     sysfs_base="/sys/fs/btrfs/$(_btrfs_get_fsid $SCRATCH_DEV)"
> +
> +     # Feature isn't present for testing
> +     if [ ! -d "$sysfs_base" ]; then
> +             echo "Skipping sysfs test: $sysfs_base not found." \
> +                  >> $seqres.full
> +             return

Oops. This doesn't umount when run with a proper device pool.

-Jeff

> +     fi
> +
> +     mixed=false
> +     case "$mkfs_options" in
> +     *-M*)
> +             mixed=true;
> +             ;;
> +     esac
> +
> +     check_chunk "$sysfs_base/allocation/system" "$mkfs_options"
> +     if $mixed; then
> +             check_chunk "$sysfs_base/allocation/mixed" "$mkfs_options"
> +     else
> +             check_chunk "$sysfs_base/allocation/data" "$mkfs_options"
> +             check_chunk "$sysfs_base/allocation/metadata" "$mkfs_options"
> +     fi
> +
> +     for dev in $used_devs; do
> +             check_dev_link $dev || exit 1
> +     done
> +
> +     umount $SCRATCH_MNT > /dev/null 2>&1
> +}
> +
> +workout "-m single -d single" 1
> +workout "-m single -d single -M" 1
> +workout "-m dup -d single" 1
> +workout "-m dup -d dup -M" 1
> +workout "-m raid0 -d raid0" 2
> +workout "-m raid1 -d raid1" 2
> +workout "-m raid5 -d raid5" 2
> +workout "-m raid6 -d raid6" 3
> +workout "-m raid10 -d raid10" 4
> +
> +echo "Silence is golden."
> +status=0
> +exit
> Index: xfstests/tests/btrfs/022.out
> ===================================================================
> --- /dev/null
> +++ xfstests/tests/btrfs/022.out
> @@ -0,0 +1,2 @@
> +QA output created by 022
> +Silence is golden


-- 
Jeff Mahoney
SUSE Labs

Attachment: signature.asc
Description: OpenPGP digital signature

<Prev in Thread] Current Thread [Next in Thread>