btrfs: test device replace, with EIO on the src dev

This test case will test to confirm the replace works with
the failed (EIO) replacing source device. EIO condition is
achieved using the DM device.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
Anand Jain
2015-09-21 13:06:18 +10:00
committed by Dave Chinner
parent e3a43a873c
commit 6a4f7e057e
3 changed files with 93 additions and 0 deletions
+81
View File
@@ -0,0 +1,81 @@
#! /bin/bash
# FS QA Test No. btrfs/100
#
# Test device replace works 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
_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 $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 replace start -B $error_devid $dev2 $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 replace completed"
status=0; exit
+11
View File
@@ -0,0 +1,11 @@
QA output created by 100
Label: none uuid: <UUID>
Total devices <NUM> FS bytes used <SIZE>
devid <DEVID> size <SIZE> used <SIZE> path SCRATCH_DEV
devid <DEVID> size <SIZE> used <SIZE> path /dev/mapper/error-test
Label: none uuid: <UUID>
Total devices <NUM> FS bytes used <SIZE>
devid <DEVID> size <SIZE> used <SIZE> path SCRATCH_DEV
=== device replace completed
+1
View File
@@ -102,3 +102,4 @@
097 auto quick send clone
098 auto quick metadata clone
099 auto quick qgroup
100 auto quick replace