| #! /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 |