On Mon, Oct 07, 2019 at 05:41:00PM +0800, Anand Jain wrote: > Test if btrfs.ko sucessfully identifies and reports the missing device, > if the missed device contians someother btrfs. > > Signed-off-by: Anand Jain <anand.jain@xxxxxxxxxx> > --- > tests/btrfs/196 | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++ > tests/btrfs/196.out | 25 +++++++++++++++++ > tests/btrfs/group | 1 + > 3 files changed, 103 insertions(+) > create mode 100755 tests/btrfs/196 > create mode 100644 tests/btrfs/196.out > > diff --git a/tests/btrfs/196 b/tests/btrfs/196 > new file mode 100755 > index 000000000000..e35cdce492e5 > --- /dev/null > +++ b/tests/btrfs/196 > @@ -0,0 +1,77 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (c) 2019 Oracle. All Rights Reserved. > +# > +# FS QA Test 196 > +# > +# Test stale and alien btrfs-device in the fs devices list. > +# > +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() > +{ > + cd / > + rm -f $tmp.* > +} > + > +# get standard environment, filters and checks > +. ./common/rc > +. ./common/filter > +. ./common/filter.btrfs > + > +# remove previous $seqres.full before test > +rm -f $seqres.full > + > +# real QA test starts here > + > +# Modify as appropriate. > +_supported_fs generic > +_supported_os Linux _supported_os btrfs > +_require_scratch > +_require_scratch_dev_pool 4 > + > +workout() > +{ > + raid=$1 > + device_nr=$2 > + > + echo $raid > + _scratch_dev_pool_get $device_nr > + > + _scratch_pool_mkfs "-d$raid -m$raid" >> $seqres.full 2>&1 || \ > + _fail "mkfs failed" > + > + # Make device_1 an alien btrfs device for the raid created above by > + # adding it to the $TEST_DIR Instead of adding $device_1 to $TEST_DIR, does creating a new btrfs on $device_1 work? I'm a bit worried that changing $TEST_DIR/$TEST_DEV configuration would have some side effects, e.g. we add it to $TEST_DIR and cancle the test before removing it, the $TEST_DEV will end up in an unexpected state in next test run. (Though we could remove the device in _cleanup, this is just an example.) > + > + # don't test with the first device as auto fs check (_check_scratch_fs) > + # picks the first device > + device_1=$(echo $SCRATCH_DEV_POOL | awk '{print $2}') > + $BTRFS_UTIL_PROG device add -f "$device_1" "$TEST_DIR" > + > + device_2=$(echo $SCRATCH_DEV_POOL | awk '{print $1}') > + _mount -o degraded $device_2 $SCRATCH_MNT > + # Check if missing device is reported as in the 196.out Test could be renumbered, no need to hardcode 196.out, just ".out file" would be fine. > + $BTRFS_UTIL_PROG filesystem show -m $SCRATCH_MNT | \ > + _filter_btrfs_filesystem_show > + > + $BTRFS_UTIL_PROG device remove "$device_1" "$TEST_DIR" I think we should remove $device_1 in _cleanup if it's not empty in case test exits unexpectly. But as mentioned above, better to avoid adding new device to $TEST_DIR. Thanks, Eryu > + _scratch_unmount > + _scratch_dev_pool_put > +} > + > +workout "raid1" "2" > +workout "raid5" "3" > +workout "raid6" "4" > +workout "raid10" "4" > + > +# success, all done > +status=0 > +exit > diff --git a/tests/btrfs/196.out b/tests/btrfs/196.out > new file mode 100644 > index 000000000000..311ae9e2f46a > --- /dev/null > +++ b/tests/btrfs/196.out > @@ -0,0 +1,25 @@ > +QA output created by 196 > +raid1 > +Label: none uuid: <UUID> > + Total devices <NUM> FS bytes used <SIZE> > + devid <DEVID> size <SIZE> used <SIZE> path SCRATCH_DEV > + *** Some devices missing > + > +raid5 > +Label: none uuid: <UUID> > + Total devices <NUM> FS bytes used <SIZE> > + devid <DEVID> size <SIZE> used <SIZE> path SCRATCH_DEV > + *** Some devices missing > + > +raid6 > +Label: none uuid: <UUID> > + Total devices <NUM> FS bytes used <SIZE> > + devid <DEVID> size <SIZE> used <SIZE> path SCRATCH_DEV > + *** Some devices missing > + > +raid10 > +Label: none uuid: <UUID> > + Total devices <NUM> FS bytes used <SIZE> > + devid <DEVID> size <SIZE> used <SIZE> path SCRATCH_DEV > + *** Some devices missing > + > diff --git a/tests/btrfs/group b/tests/btrfs/group > index 3ce6fa4628d8..c86ea2516397 100644 > --- a/tests/btrfs/group > +++ b/tests/btrfs/group > @@ -198,3 +198,4 @@ > 193 auto quick qgroup enospc limit > 194 auto volume > 195 auto volume > +196 auto quick volume > -- > 1.8.3.1 >