#! /bin/bash
# FS QA Test No. 098
#
# Create and populate an XFS filesystem, corrupt the journal, then see how
# the kernel and xfs_repair deal with it.
#
#-----------------------------------------------------------------------
# Copyright (c) 2015 Oracle, Inc.  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
. ./common/attr
. ./common/populate

# real QA test starts here
_supported_fs xfs
_supported_os Linux

# We corrupt XFS on purpose, and check if assert failures would crash system.
_require_no_xfs_bug_on_assert
_require_scratch
test -n "${FORCE_FUZZ}" || _require_scratch_xfs_crc
_require_attrs
_require_populate_commands
_require_xfs_db_blocktrash_z_command
test -z "${FUZZ_ARGS}" && FUZZ_ARGS="-n 8 -3"

rm -f $seqres.full

TESTDIR="${SCRATCH_MNT}/scratchdir"
TESTFILE="${TESTDIR}/testfile"

echo "+ create scratch fs"
_scratch_mkfs_xfs > /dev/null

echo "+ mount fs image"
_scratch_mount
blksz="$(stat -f -c '%s' "${SCRATCH_MNT}")"

echo "+ make some files"
mkdir -p "${TESTDIR}"
for x in `seq 1 1024`; do
	touch "${SCRATCH_MNT}/junk.${x}"
	inode="$(stat -c '%i' "${SCRATCH_MNT}/junk.${x}")"
	if [ "$x" -gt 512 ] && [ "$((inode % 64))" -eq 0 ]; then
		mv "${SCRATCH_MNT}/junk.${x}" "${TESTFILE}.1"
		break
	fi
done
for x in `seq 2 64`; do
	touch "${TESTFILE}.${x}"
done
inode="$(stat -c '%i' "${TESTFILE}.1")"
umount "${SCRATCH_MNT}"

echo "+ check fs"
_scratch_xfs_repair -n >> $seqres.full 2>&1 || _fail "xfs_repair should not fail"

echo "+ corrupt image"
logstart="$(_scratch_xfs_get_sb_field logstart)"
logstart="$(_scratch_xfs_db -c "convert fsblock ${logstart} byte" | sed -e 's/^.*(\([0-9]*\).*$/\1/g')"
logblocks="$(_scratch_xfs_get_sb_field logblocks)"
$XFS_IO_PROG -f -c "pwrite -S 0x62 ${logstart} $((logblocks * blksz))" "${SCRATCH_DEV}" >> $seqres.full

echo "+ mount image"
_try_scratch_mount 2>/dev/null && _fail "mount should not succeed"

echo "+ repair fs"
_repair_scratch_fs >> $seqres.full 2>&1

# We may trigger assert related WARNINGs if we corrupt log on a
# CONFIG_XFS_WARN or CONFIG_XFS_DEBUG (CONFIG_XFS_ASSERT_FATAL is
# disabled) build, so filter them.
_check_dmesg _filter_assert_dmesg

echo "+ mount image (2)"
_scratch_mount

echo "+ chattr -R -i"
$CHATTR_PROG -R -f -i "${SCRATCH_MNT}/"

echo "+ modify files (2)"
broken=0
for x in `seq 1 64`; do
	test -e "${TESTFILE}.${x}" || continue
	echo moo | dd oflag=append conv=notrunc of="${TESTFILE}.${x}" 2>/dev/null
	test $? -ne 0 && broken=1
done
echo "broken: ${broken}"
umount "${SCRATCH_MNT}"

echo "+ check fs (2)"
_scratch_xfs_repair -n >> $seqres.full 2>&1 || _fail "xfs_repair should not fail"

status=0
exit
