From: Mohamed Barwani Date: Mon, 30 Jul 2007 15:59:01 +0000 (+0000) Subject: Create test 178 as described by bnaujok. X-Git-Tag: v1.1.0~471 X-Git-Url: http://git.apps.os.sepia.ceph.com/?p=xfstests-dev.git;a=commitdiff_plain;h=f9ab891b3a47f922214bdc82047692238dadebe0 Create test 178 as described by bnaujok. Merge of master-melb:xfs-cmds:29273a by kenmcd. New Test --- diff --git a/178 b/178 new file mode 100755 index 00000000..f204611c --- /dev/null +++ b/178 @@ -0,0 +1,84 @@ +#! /bin/sh +# 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. +#----------------------------------------------------------------------- +# +# creator +owner=mohamedb@sgi.com + +seq=`basename $0` +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 + +[ $agcount -le 2 ] && _notrun "Test requires more than 2 AGs." + +_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 diff --git a/178.out b/178.out new file mode 100644 index 00000000..1709863f --- /dev/null +++ b/178.out @@ -0,0 +1,79 @@ +QA output created by 178 +meta-data=DDEV isize=XXX agcount=N, agsize=XXX blks +data = bsize=XXX blocks=XXX, imaxpct=PCT + = sunit=XXX swidth=XXX, unwritten=X +naming =VERN bsize=XXX +log =LDEV bsize=XXX blocks=XXX +realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX +Phase 1 - find and verify superblock... +bad primary superblock - bad magic number !!! + +attempting to find secondary superblock... +found candidate secondary superblock... +verified secondary superblock... +writing modified primary superblock +sb root inode value INO inconsistent with calculated value INO +resetting superblock root inode pointer to INO +sb realtime bitmap inode INO inconsistent with calculated value INO +resetting superblock realtime bitmap ino pointer to INO +sb realtime summary inode INO inconsistent with calculated value INO +resetting superblock realtime summary ino pointer to INO +Phase 2 - using log + - zero log... + - scan filesystem freespace and inode maps... + - found root inode chunk +Phase 3 - for each AG... + - scan and clear agi unlinked lists... + - process known inodes and perform inode discovery... + - process newly discovered inodes... +Phase 4 - check for duplicate blocks... + - setting up duplicate extent list... + - check for inodes claiming duplicate blocks... +Phase 5 - rebuild AG headers and trees... + - reset superblock... +Phase 6 - check inode connectivity... + - resetting contents of realtime bitmap and summary inodes + - traversing filesystem ... + - traversal finished ... + - moving disconnected inodes to lost+found ... +Phase 7 - verify and correct link counts... +Note - stripe unit (0) and width (0) fields have been reset. +Please set with mount -o sunit=,swidth= +done +repair passed +Phase 1 - find and verify superblock... +bad primary superblock - bad magic number !!! + +attempting to find secondary superblock... +found candidate secondary superblock... +verified secondary superblock... +writing modified primary superblock +sb root inode value INO inconsistent with calculated value INO +resetting superblock root inode pointer to INO +sb realtime bitmap inode INO inconsistent with calculated value INO +resetting superblock realtime bitmap ino pointer to INO +sb realtime summary inode INO inconsistent with calculated value INO +resetting superblock realtime summary ino pointer to INO +Phase 2 - using log + - zero log... + - scan filesystem freespace and inode maps... + - found root inode chunk +Phase 3 - for each AG... + - scan and clear agi unlinked lists... + - process known inodes and perform inode discovery... + - process newly discovered inodes... +Phase 4 - check for duplicate blocks... + - setting up duplicate extent list... + - check for inodes claiming duplicate blocks... +Phase 5 - rebuild AG headers and trees... + - reset superblock... +Phase 6 - check inode connectivity... + - resetting contents of realtime bitmap and summary inodes + - traversing filesystem ... + - traversal finished ... + - moving disconnected inodes to lost+found ... +Phase 7 - verify and correct link counts... +Note - stripe unit (0) and width (0) fields have been reset. +Please set with mount -o sunit=,swidth= +done +repair passed diff --git a/common.filter b/common.filter index 5cd982e4..0c3f41d9 100644 --- a/common.filter +++ b/common.filter @@ -124,6 +124,9 @@ _filter_mkfs() print STDERR "ddev=$1\nisize=$2\nagcount=$3\nagsize=$4\n"; print STDOUT "meta-data=DDEV isize=XXX agcount=N, agsize=XXX blks\n"; } + if (/^\s+=\s+sectsz=(\d+)\s+attr=(\d+)/) { + print STDERR "sectsz=$1\nattr=$2\n"; + } if (/^data\s+=\s+bsize=(\d+)\s+blocks=(\d+), imaxpct=(\d+)/) { print STDERR "dbsize=$1\ndblocks=$2\nimaxpct=$3\n"; print STDOUT "data = bsize=XXX blocks=XXX, imaxpct=PCT\n"; diff --git a/group b/group index c8f3eb4e..e195cb61 100644 --- a/group +++ b/group @@ -263,3 +263,4 @@ filestreams dgc@sgi.com 173 rw filestreams auto 174 rw filestreams auto 177 rw other auto +178 mkfs other auto