#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2015 Oracle, Inc.  All Rights Reserved.
#
# FS QA Test No. 099
#
# Create and populate an XFS filesystem, corrupt a block directory, then see
# how the kernel and xfs_repair deal with it.
#
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

_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

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

echo "+ mount fs image"
_scratch_mount
dblksz="$($XFS_INFO_PROG "${SCRATCH_MNT}" | grep naming.*bsize | sed -e 's/^.*bsize=//g' -e 's/\([0-9]*\).*$/\1/g')"
nr="$((dblksz / 40))"
blksz="$(stat -f -c '%s' "${SCRATCH_MNT}")"
leaf_lblk="$((32 * 1073741824 / blksz))"
node_lblk="$((64 * 1073741824 / blksz))"

echo "+ make some files"
__populate_create_dir "${SCRATCH_MNT}/blockdir" "${nr}"
inode="$(stat -c '%i' "${SCRATCH_MNT}/blockdir")"
umount "${SCRATCH_MNT}"

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

echo "+ check dir"
__populate_check_xfs_dir "${inode}" block

echo "+ corrupt dir"
_scratch_xfs_db -x -c "inode ${inode}" -c 'dblock 0' -c "stack" -c "blocktrash -x 32 -y $((blksz * 8)) -z ${FUZZ_ARGS}" >> $seqres.full

echo "+ mount image && modify dir"
if _try_scratch_mount >> $seqres.full 2>&1; then

	rm -rf "${SCRATCH_MNT}/blockdir/00000000" 2> /dev/null && _fail "modified corrupt directory"
	mkdir "${SCRATCH_MNT}/blockdir/xxxxxxxx" 2> /dev/null && _fail "add to corrupt directory"
	umount "${SCRATCH_MNT}"
fi

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

echo "+ mount image (2)"
_scratch_mount

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

echo "+ modify dir (2)"
mkdir -p "${SCRATCH_MNT}/blockdir"
rm -rf "${SCRATCH_MNT}/blockdir/00000000" || _fail "couldn't modify repaired directory"
mkdir "${SCRATCH_MNT}/blockdir/xxxxxxxx" || _fail "add to repaired directory"
umount "${SCRATCH_MNT}"

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

status=0
exit
