#! /bin/bash
# FS QA Test No. 417
#
# Populate a XFS filesystem and fuzz every local-format symlink inode field.
# Use xfs_scrub to fix the corruption.
#
#-----------------------------------------------------------------------
# Copyright (c) 2017 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-1303  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 7 15

_cleanup()
{
	cd /
	rm -rf $tmp.*
}

# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/populate
. ./common/fuzzy

# real QA test starts here
_supported_os Linux
_supported_fs xfs
_require_scratch_xfs_fuzz_fields

echo "Format and populate"
_scratch_populate_cached nofill > $seqres.full 2>&1

echo "Find local-format symlink inode"
_scratch_mount
inum=$(stat -c '%i' $SCRATCH_MNT/S_IFLNK.FMT_LOCAL)
_scratch_unmount

echo "Fuzz inode"
_scratch_xfs_fuzz_metadata '' 'online'  "inode ${inum}" >> $seqres.full
echo "Done fuzzing inode"

# success, all done
status=0
exit
