#! /bin/bash
# FS QA Test No. 178
#
# Reproduce PV#:967665
# Test if mkfs.xfs wipes old AG headers when using -f option
#
#-----------------------------------------------------------------------
# Copyright (c) 2007 Silicon Graphics, 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.*
}
# dd the 1st sector then repair
_dd_repair_check()
{
	#dd first sector
	dd if=/dev/zero of=$1 bs=$2 count=1 2>&1 | _filter_dd
	#xfs_repair
	_scratch_xfs_repair 2>&1 | _filter_repair
	#check repair
	if _check_scratch_fs; then
        	echo "repair passed"
	else
	        echo "repair failed!"
	fi
}

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

# real QA test starts here

# Modify as appropriate.
_supported_fs xfs
_supported_os Linux

# From the PV
# o Summary of testing:
#    1. mkfs.xfs a default filesystem, note agcount value.
#    2. dd zero first sector and repair and verify.
#    3. mkfs.xfs overriding agcount to a smaller value
#             (ie. each AG is bigger)
#    4. dd zero first sector, repair and verify.
#          -> old mkfs.xfs will cause repair to incorrectly
#             fix filesystem, new mkfs.xfs will be fine.

_require_scratch
_scratch_mkfs_xfs | _filter_mkfs 2>$tmp.mkfs \
        || _fail "mkfs failed!"

# By executing the followint tmp file, will get on the mkfs options stored in
# variables
. $tmp.mkfs

# if the default agcount is too small, bump it up and re-mkfs before testing
if [ $agcount -lt 8 ]; then
	agcount=8
	_scratch_mkfs_xfs -dagcount=$agcount >/dev/null 2>&1 \
	        || _notrun "Test requires at least 8 AGs."
fi

_dd_repair_check $SCRATCH_DEV $sectsz

# smaller AGCOUNT
let "agcount=$agcount-2"
_scratch_mkfs_xfs -dagcount=$agcount >/dev/null 2>&1 \
        || _fail "mkfs failed!"

_dd_repair_check $SCRATCH_DEV $sectsz

# success, all done
status=0
exit
