From 7dc0112d7206468265094428aff250330437d2fc Mon Sep 17 00:00:00 2001 From: Anand Jain Date: Mon, 21 Sep 2015 13:06:18 +1000 Subject: [PATCH] btrfs: test device delete with EIO on src dev This test case tests if the device delete works with the failed (EIO) source device. EIO errors are achieved usign the DM device. This test would need following btrfs-progs and btrfs kernel patch btrfs-progs: device delete to accept devid Btrfs: device delete by devid However when btrfs-progs patch is not found this test will not run, and when kernel patch is not found btrfs-progs will fail gracefully and thus the test script. Signed-off-by: Anand Jain Reviewed-by: Dave Chinner Signed-off-by: Dave Chinner --- common/rc | 7 ++++ tests/btrfs/101 | 82 +++++++++++++++++++++++++++++++++++++++++++++ tests/btrfs/101.out | 11 ++++++ tests/btrfs/group | 1 + 4 files changed, 101 insertions(+) create mode 100755 tests/btrfs/101 create mode 100644 tests/btrfs/101.out diff --git a/common/rc b/common/rc index 1094de4b..3e970607 100644 --- a/common/rc +++ b/common/rc @@ -2767,6 +2767,13 @@ _require_meta_uuid() umount $SCRATCH_MNT } +_require_btrfs_dev_del_by_devid() +{ + $BTRFS_UTIL_PROG device delete --help | egrep devid > /dev/null 2>&1 + [ $? -eq 0 ] || _notrun "$BTRFS_UTIL_PROG too old "\ + "(must support 'btrfs device delete /')" +} + _get_total_inode() { if [ -z "$1" ]; then diff --git a/tests/btrfs/101 b/tests/btrfs/101 new file mode 100755 index 00000000..5969ab60 --- /dev/null +++ b/tests/btrfs/101 @@ -0,0 +1,82 @@ +#! /bin/bash +# FS QA Test No. btrfs/101 +# +# Test device delete when the source device has EIO +# +# Copyright (c) 2015 Oracle. 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 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + + +_cleanup() +{ + _dmerror_cleanup + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter +. ./common/filter.btrfs +. ./common/dmerror + +_supported_fs btrfs +_supported_os Linux +_need_to_be_root +_require_scratch_dev_pool 3 +_require_btrfs_dev_del_by_devid +_dmerror_required + +rm -f $seqres.full + +dev1="`echo $SCRATCH_DEV_POOL | $AWK_PROG '{print $2}'`" +dev2="`echo $SCRATCH_DEV_POOL | $AWK_PROG '{print $3}'`" + +_dmerror_init +_mkfs_dev -f -d raid1 -m raid1 $dev1 $dev2 $DMERROR_DEV +_dmerror_mount + +_run_btrfs_util_prog filesystem show -m $SCRATCH_MNT +$BTRFS_UTIL_PROG filesystem show -m $SCRATCH_MNT | _filter_btrfs_filesystem_show + +error_devid=`$BTRFS_UTIL_PROG filesystem show -m $SCRATCH_MNT |\ + egrep $DMERROR_DEV | $AWK_PROG '{print $2}'` + +snapshot_cmd="$BTRFS_UTIL_PROG subvolume snapshot -r $SCRATCH_MNT" +snapshot_cmd="$snapshot_cmd $SCRATCH_MNT/snap_\`date +'%H_%M_%S_%N'\`" +run_check $FSSTRESS_PROG -d $SCRATCH_MNT -n 200 -p 8 $FSSTRESS_AVOID -x \ + "$snapshot_cmd" -X 50 + +# now load the error into the DMERROR_DEV +_dmerror_load_table + +_run_btrfs_util_prog device delete $error_devid $SCRATCH_MNT + +_run_btrfs_util_prog filesystem show -m $SCRATCH_MNT +$BTRFS_UTIL_PROG filesystem show -m $SCRATCH_MNT | _filter_btrfs_filesystem_show + +echo "=== device delete completed" + +status=0; exit diff --git a/tests/btrfs/101.out b/tests/btrfs/101.out new file mode 100644 index 00000000..4621902a --- /dev/null +++ b/tests/btrfs/101.out @@ -0,0 +1,11 @@ +QA output created by 101 +Label: none uuid: + Total devices FS bytes used + devid size used path SCRATCH_DEV + devid size used path /dev/mapper/error-test + +Label: none uuid: + Total devices FS bytes used + devid size used path SCRATCH_DEV + +=== device delete completed diff --git a/tests/btrfs/group b/tests/btrfs/group index 6370f542..c3abb998 100644 --- a/tests/btrfs/group +++ b/tests/btrfs/group @@ -103,3 +103,4 @@ 098 auto quick metadata clone 099 auto quick qgroup 100 auto quick replace +101 auto quick replace -- 2.39.5