From: Liu Bo Date: Mon, 16 Oct 2017 16:51:20 +0000 (-0600) Subject: btrfs: test if device delete ends up with losing raid profile X-Git-Tag: v2022.05.01~1819 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=f711dfad6c273e8108dd91f45d20686c867a0205;p=xfstests-dev.git btrfs: test if device delete ends up with losing raid profile Currently running 'btrfs device delete' can end up with losing data raid profile (if any), this test is to reproduce the problem. The fix is "Btrfs: avoid losing data raid profile when deleting a device" Signed-off-by: Liu Bo Reviewed-by: Eryu Guan Signed-off-by: Eryu Guan --- diff --git a/tests/btrfs/151 b/tests/btrfs/151 new file mode 100755 index 00000000..40b248c6 --- /dev/null +++ b/tests/btrfs/151 @@ -0,0 +1,80 @@ +#! /bin/bash +# FS QA Test 151 +# +# Test if it's losing data chunk's raid profile after 'btrfs device +# remove'. +# +# The fix is +# Btrfs: avoid losing data raid profile when deleting a device +# +#----------------------------------------------------------------------- +# Copyright (c) 2017 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() +{ + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter + +# remove previous $seqres.full before test +rm -f $seqres.full + +# real QA test starts here + +# Modify as appropriate. +_supported_fs btrfs +_supported_os Linux +_require_scratch +_require_scratch_dev_pool 3 +_require_btrfs_dev_del_by_devid + +# We need exactly 3 disks to form a fixed stripe layout for this test. +_scratch_dev_pool_get 3 + +# create raid1 for data +_scratch_pool_mkfs "-d raid1 -b 1G" >> $seqres.full 2>&1 + +# we need an empty data chunk, so nospace_cache is required. +_scratch_mount -onospace_cache + +# if data chunk is empty, 'btrfs device remove' can change raid1 to +# single. +$BTRFS_UTIL_PROG device delete 2 $SCRATCH_MNT >> $seqres.full 2>&1 + +# save btrfs filesystem df output for debug purpose +$BTRFS_UTIL_PROG filesystem df $SCRATCH_MNT 2>&1 | \ + tee -a $seqres.full | $AWK_PROG -F ':' '/Data,/ {print $1}' + +_scratch_dev_pool_put + +# success, all done +status=0 +exit diff --git a/tests/btrfs/151.out b/tests/btrfs/151.out new file mode 100644 index 00000000..0a1de068 --- /dev/null +++ b/tests/btrfs/151.out @@ -0,0 +1,2 @@ +QA output created by 151 +Data, RAID1 diff --git a/tests/btrfs/group b/tests/btrfs/group index e73bb1b3..a7ff7b06 100644 --- a/tests/btrfs/group +++ b/tests/btrfs/group @@ -153,3 +153,4 @@ 148 auto quick rw 149 auto quick send compress 150 auto quick dangerous +151 auto quick