Files
apfstests/115
T
Christoph Hellwig f381f98206 xfstests: move GPL boilerplates to fix lsqa.pl
It turns out lsqa.pl nees the test number and description first in the
file, so move the GPL boilerplates below it.

Also remove acouple of cases where we have one full copyright line + gpl
boilerplate before the description and another copyright line after
the description.

Signed-off-by: Christoph Hellwig <hch@lst.de>
2009-05-28 17:04:15 +02:00

259 lines
5.3 KiB
Bash
Executable File

#! /bin/sh
# FS QA Test No. 115
#
# Test out xfs_repair_ipaths
#
#-----------------------------------------------------------------------
# Copyright (c) 2005 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
#
#-----------------------------------------------------------------------
#
# creator
owner=tes@crackle.melbourne.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.*
}
# Example output:
#
# ~/attr -Fl a/b/c/d/foo
# Attribute "0000000000180080 0000000000000001" has a 3 byte value for a/b/c/d/foo
#
# ~/attr -Fg "0000000000180080 0000000000000001" a/b/c/d/foo
# Attribute "0000000000180080 0000000000000001" had a 3 byte value for a/b/c/d/foo:
# foo
#
# ~/attr -Pg "0000000000180080 0000000000000001" a/b/c/d/foo
# Attribute "0000000000180080 0000000000000001" had a 12 byte value for a/b/c/d/foo:
# /a/b/c/d/foo
#
#
# filter out inode numbers to ordinal numbers
# (assumes they come in order)
#
_filter_inodes()
{
find $SCRATCH_MNT -exec stat -iq {} \; >$tmp.inodes
sed -e 's/[()]//g' \
-e 's/Attribute "[0-9][0-9]*/Attribute "INODE/' \
| nawk -v inodefile=$tmp.inodes '
BEGIN {
i=0
while (getline < inodefile > 0) {
i++
inodemap[$1] = i
}
}
/inode:/ {
for (i = 1; i <= NF; i++) {
nextone = i+1
if ($i == "inode:") {
$nextone = inodemap[$nextone]
}
printf "%s ", $i
}
printf "\n"
next
}
{ print }
'
}
_filter()
{
sed -e 's/inode: \([0-9][0-9]*\)/inode: N/g' \
-e 's/Attribute "[0-9][0-9]*/Attribute "INODE/'
}
# get standard environment, filters and checks
. ./common.rc
. ./common.filter
_supported_fs xfs
_supported_os IRIX
_require_scratch
rm -f $here/$seq.full
echo "mkfs"
_scratch_mkfs_xfs >>$here/$seq.full 2>&1 \
|| _fail "mkfs scratch failed"
_scratch_mkfs_xfs -i paths=1 >>$here/$seq.full 2>&1 \
|| _notrun "i_paths not supported"
echo "mount"
_scratch_mount >>$here/$seq.full 2>&1 \
|| _fail "mount failed: $MOUNT_OPTIONS"
# real QA test starts here
verbose=false
echo ""
echo "--- create some files and directories to work on ---"
echo ""
cd $SCRATCH_MNT
d=dir2/dir3/dir4
mkdir -p $d
touch file1
touch dir2/file2
touch dir2/dir3/file3
touch $d/file4
touch $d/file5
touch $d/file6
touch $d/file7
touch $d/file8
touch $d/file9
_do_test()
{
echo ""
echo "--- check all is ok before we start ---"
echo ""
xfs_check_ipaths $SCRATCH_MNT
xfs_repair_ipaths -n $SCRATCH_MNT
echo ""
echo "--- now break some stuff ---"
echo ""
cnt=1
echo ""
echo "1. remove the EA"
echo ""
attr -Fl dir2/file2
stat_ino=`stat -iq dir2`
attrname=`printf "%.16x %.16x" $stat_ino $cnt`
#echo "attrname = $attrname"
attr -Fr "$attrname" dir2/file2
attr -Fl dir2/file2
echo ""
echo "2. change the EA name"
echo ""
attr -Fl dir2/dir3/file3
stat_ino=100
attrname=`printf "%.16x %.16x" $stat_ino $cnt`
attrvalue=file3
attr -Fs "$attrname" -V $attrvalue dir2/dir3/file3
attr -Fl dir2/dir3/file3
echo ""
echo "3. change the EA value"
echo ""
attr -Fl $d/file4
stat_ino=`stat -iq $d`
attrname=`printf "%.16x %.16x" $stat_ino $cnt`
attrvalue=woopdydoo
attr -Fs "$attrname" -V "$attrvalue" $d/file4
attr -Fl $d/file4
attr -Fg "$attrname" $d/file4
echo ""
echo "4. add an extra EA - diff name, same value"
echo ""
attr -Fl $d/file5
stat_ino=100
attrname=`printf "%.16x %.16x" $stat_ino $cnt`
attrvalue=file5
attr -Fs "$attrname" -V $attrvalue $d/file5
attr -Fl $d/file5
attr -Fg "$attrname" $d/file5
echo ""
echo "5. add an extra EA - diff name, diff value"
echo ""
attr -Fl $d/file6
stat_ino=100
attrname=`printf "%.16x %.16x" $stat_ino $cnt`
attrvalue=file600
attr -Fs "$attrname" -V $attrvalue $d/file6
attr -Fl $d/file6
attr -Fg "$attrname" $d/file6
echo ""
echo "6. give bad fmt'ed EA name and get rid of existing name"
echo ""
attrname=woof
attrvalue=file7
attr -Fs "$attrname" -V $attrvalue $d/file7
# remove old attrname
cnt=1
stat_ino=`stat -iq $d`
attrname=`printf "%.16x %.16x" $stat_ino $cnt`
attr -Fr "$attrname" $d/file7
echo ""
echo "--- now check it ---"
echo ""
echo ""
echo "xfs_check_ipaths"
echo ""
xfs_check_ipaths $SCRATCH_MNT
echo ""
echo "xfs_repair_ipaths"
echo ""
xfs_repair_ipaths -n $SCRATCH_MNT
echo ""
echo "--- now repair it ---"
echo ""
echo ""
echo "xfs_repair_ipaths"
echo ""
xfs_repair_ipaths $SCRATCH_MNT
echo ""
echo "--- now check it again ---"
echo ""
echo ""
echo ""
echo "xfs_check_ipaths"
echo ""
xfs_check_ipaths $SCRATCH_MNT
echo ""
echo "xfs_repair_ipaths"
echo ""
xfs_repair_ipaths -n $SCRATCH_MNT
}
_do_test 2>&1 | tee $seq.full | _filter_inodes
# success, all done
status=0
exit