2 # FS QA Test No. btrfs/003
6 #-----------------------------------------------------------------------
7 # Copyright (c) 2011 Oracle. All Rights Reserved.
9 # This program is free software; you can redistribute it and/or
10 # modify it under the terms of the GNU General Public License as
11 # published by the Free Software Foundation.
13 # This program is distributed in the hope that it would be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with this program; if not, write the Free Software Foundation,
20 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21 #-----------------------------------------------------------------------
25 seqres=$RESULT_DIR/$seq
26 echo "QA output created by $seq"
30 status=1 # failure is the default!
33 trap "_cleanup; exit \$status" 0 1 2 3 15
39 if [ $dev_removed == 1 ]; then
41 _devmgt_add "${removed_dev_htl}"
45 # get standard environment, filters and checks
52 _require_scratch_dev_pool 4
53 _require_deletable_scratch_dev_pool
54 _require_command "$WIPEFS_PROG" wipefs
58 # Test cases related to raid in btrfs
61 export MKFS_OPTIONS="-m raid0 -d raid0"
62 _scratch_pool_mkfs >> $seqres.full 2>&1 || _fail "mkfs failed"
64 dirp=`mktemp -duq $SCRATCH_MNT/dir.XXXXXX`
65 _populate_fs -n 1 -f 20 -d 10 -r $dirp -s 10 -c
71 export MKFS_OPTIONS="-m raid1 -d raid1"
72 _scratch_pool_mkfs >> $seqres.full 2>&1 || _fail "mkfs failed"
74 dirp=`mktemp -duq $SCRATCH_MNT/dir.XXXXXX`
75 _populate_fs -n 1 -f 20 -d 10 -r $dirp -s 10 -c
81 export MKFS_OPTIONS="-m raid10 -d raid10"
82 _scratch_pool_mkfs >> $seqres.full 2>&1 || _fail "mkfs failed"
84 dirp=`mktemp -duq $SCRATCH_MNT/dir.XXXXXX`
85 _populate_fs -n 1 -f 20 -d 10 -r $dirp -s 10
91 export MKFS_OPTIONS="-m single -d single"
92 _scratch_pool_mkfs >> $seqres.full 2>&1 || _fail "mkfs failed"
94 dirp=`mktemp -duq $SCRATCH_MNT/dir.XXXXXX`
95 _populate_fs -n 1 -f 20 -d 10 -r $dirp -s 10
102 local -a devs="( $SCRATCH_DEV_POOL )"
107 export MKFS_OPTIONS=""
108 _scratch_mkfs >> $seqres.full 2>&1 || _fail "mkfs failed"
110 dirp=`mktemp -duq $SCRATCH_MNT/dir.XXXXXX`
111 _populate_fs -n 1 -f 20 -d 10 -r $dirp -s 10
112 for i in `seq 2 $n`; do
113 $WIPEFS_PROG -a ${devs[$i]} >> $seqres.full 2>&1 || \
114 _fail "wipefs failed"
115 $BTRFS_UTIL_PROG device add ${devs[$i]} $SCRATCH_MNT >> $seqres.full 2>&1 || _fail "device add failed"
117 $BTRFS_UTIL_PROG filesystem balance $SCRATCH_MNT >> $seqres.full 2>&1 || _fail "balance failed"
124 local devs=( $SCRATCH_DEV_POOL )
129 # exclude the first and the last disk in the disk pool
131 ds=${devs[@]:1:$(($n-1))}
133 export MKFS_OPTIONS="-m raid1 -d raid1"
134 _scratch_mkfs "$ds" >> $seqres.full 2>&1 || _fail "tr: mkfs failed"
136 dirp=`mktemp -duq $SCRATCH_MNT/dir.XXXXXX`
137 _populate_fs -n 1 -f 20 -d 10 -r $dirp -s 10
139 #pick the 2nd last disk
140 ds=${devs[@]:$(($n-1)):1}
142 # retrive the HTL for this scsi disk
143 d=`echo $ds|cut -d"/" -f3`
144 removed_dev_htl=`ls -l /sys/class/block/${d} | rev | cut -d "/" -f 3 | rev`
147 _devmgt_remove ${removed_dev_htl} $ds
150 $BTRFS_UTIL_PROG filesystem show $SCRATCH_DEV | grep "Some devices missing" >> $seqres.full || _fail \
151 "btrfs did not report device missing"
153 # add a new disk to btrfs
154 ds=${devs[@]:$(($n)):1}
155 $WIPEFS_PROG -a ${ds} >> $seqres.full 2>&1 || _fail "wipefs failed"
156 $BTRFS_UTIL_PROG device add ${ds} $SCRATCH_MNT >> $seqres.full 2>&1 || _fail "dev add failed"
157 # in some system balance fails if there is no delay (a bug)
158 # putting sleep 10 to work around as of now
160 $BTRFS_UTIL_PROG filesystem balance $SCRATCH_MNT >> $seqres.full 2>&1 || _fail "dev balance failed"
162 # cleaup. add the removed disk
164 _devmgt_add "${removed_dev_htl}"
170 _scratch_pool_mkfs >> $seqres.full 2>&1 || _fail "mkfs failed"
172 dirp=`mktemp -duq $SCRATCH_MNT/dir.XXXXXX`
173 _populate_fs -n 1 -f 20 -d 10 -r $dirp -s 10
175 # pick last dev in the list
176 dev_del=`echo ${SCRATCH_DEV_POOL} | awk '{print $NF}'`
177 $BTRFS_UTIL_PROG device delete $dev_del $SCRATCH_MNT || _fail "btrfs device delete failed"
178 $BTRFS_UTIL_PROG filesystem show $SCRATCH_DEV 2>&1 | grep $dev_del >> $seqres.full && _fail "btrfs still shows the deleted dev"
190 echo "Silence is golden"