Files
apfstests/tests/btrfs/146
T
Lu Fengqi 640e4f6d7a btrfs/146: make sure hit all stripes in the case of compression
In the case of compression, each 128K input data chunk will be
compressed to 4K (because of the characters written are duplicate).
Therefore we have to write (128K * 16) to make sure every stripe can be
hit.

Signed-off-by: Lu Fengqi <lufq.fnst@cn.fujitsu.com>
Reviewed-by: Eryu Guan <guaneryu@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
2018-03-08 17:55:08 +08:00

101 lines
3.0 KiB
Bash
Executable File

#! /bin/bash
# FS QA Test No. 146
#
# Open a file several times, write to it, fsync on all fds and make sure that
# they all return 0. Change the device to start throwing errors. Write again
# on all fds and fsync on all fds. Ensure that we get errors on all of them.
# Then fsync on all one last time and verify that all return 0.
#
#-----------------------------------------------------------------------
# Copyright (c) 2017, Jeff Layton <jlayton@redhat.com>
#
# 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 -rf $tmp.* $testdir
_dmerror_cleanup
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/dmerror
# real QA test starts here
_supported_os Linux
_supported_fs btrfs
_require_dm_target error
_require_test_program fsync-err
_require_test_program dmerror
# bring up dmerror device
_scratch_unmount
_dmerror_init
# Replace first device with error-test device
old_SCRATCH_DEV=$SCRATCH_DEV
SCRATCH_DEV_POOL=`echo $SCRATCH_DEV_POOL | perl -pe "s#$SCRATCH_DEV#$DMERROR_DEV#"`
SCRATCH_DEV=$DMERROR_DEV
_require_scratch
_require_scratch_dev_pool
rm -f $seqres.full
echo "Format and mount"
# Build a filesystem with 2 devices that stripes the data across
# both devices, but mirrors metadata across both. Then, make one
# of the devices fail and test what it does.
_scratch_pool_mkfs "-d raid0 -m raid1" > $seqres.full 2>&1
_scratch_mount
# How much do we need to write? We need to hit all of the stripes. btrfs uses a
# fixed 64k stripesize, so write enough to hit each one. In the case of
# compression, each 128K input data chunk will be compressed to 4K (because of
# the characters written are duplicate). Therefore we have to write
# (128K * 16) = 2048K to make sure every stripe can be hit.
number_of_devices=`echo $SCRATCH_DEV_POOL | wc -w`
write_kb=$(($number_of_devices * 2048))
_require_fs_space $SCRATCH_MNT $write_kb
testfile=$SCRATCH_MNT/fsync-err-test
SCRATCH_DEV=$old_SCRATCH_DEV
$here/src/fsync-err -b $(($write_kb * 1024)) -d $here/src/dmerror $testfile
# success, all done
_dmerror_load_working_table
# fs may be corrupt after this -- attempt to repair it
_repair_scratch_fs >> $seqres.full
# remove dmerror device
_dmerror_cleanup
status=0
exit