#! /bin/bash
# FS QA Test No. 442
#
# Test writeback error handling when writing to block devices via pagecache.
# See src/fsync-err.c for details of what test actually does.
#
#-----------------------------------------------------------------------
# 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
_require_scratch
_require_dm_target error
_require_test_program fsync-err
_require_test_program dmerror

rm -f $seqres.full

_dmerror_init

$here/src/fsync-err -d $here/src/dmerror $DMERROR_DEV

# success, all done
_dmerror_load_working_table
_dmerror_cleanup
_scratch_mkfs > $seqres.full 2>&1
status=0
exit
