mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
e714acc0ef
One of the big cpu time consumers when running xfsqa on UML is forking of new processes. when looping lots of times, using 'expr' to calculate the loop counter increment means we fork at least once every loop. using shell builtins means that we don't fork and many tests run substantially faster. Some tests are even runnable with this modification. e.g. 110 went from taking 4500s to run down to 9s with the loop iterators changed to avoid forking. Signed-off-by: Dave Chinner <david@fromorbit.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
100 lines
1.9 KiB
Bash
100 lines
1.9 KiB
Bash
#! /bin/sh
|
|
# FSQA Test No. 182
|
|
#
|
|
# Test for NULL files problem
|
|
# test inode size is on disk after sync - expose log replay bug
|
|
#
|
|
#-----------------------------------------------------------------------
|
|
# Copyright (c) 2006 Silicon Graphics, Inc. All Rights Reserved.
|
|
#-----------------------------------------------------------------------
|
|
#
|
|
# creator
|
|
owner=lachlan@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()
|
|
{
|
|
_cleanup_testdir
|
|
}
|
|
|
|
# get standard environment, filters and checks
|
|
. ./common.rc
|
|
. ./common.filter
|
|
|
|
# real QA test starts here
|
|
_supported_fs xfs
|
|
_supported_os Linux IRIX
|
|
|
|
_setup_testdir
|
|
_require_scratch
|
|
_scratch_mkfs_xfs >/dev/null 2>&1
|
|
_scratch_mount
|
|
|
|
_check_files()
|
|
{
|
|
# check file size and contents
|
|
i=1;
|
|
while [ $i -lt 1000 ]
|
|
do
|
|
file=$SCRATCH_MNT/$i
|
|
# if file is missing then sync failed
|
|
if [ -e $file ]
|
|
then
|
|
# if file size is not 32KB then sync failed
|
|
if [ `ls -l $file | tr -s ' ' | cut -d ' ' -f 5` -eq 32768 ]
|
|
then
|
|
# if file has non-zero size but no extents then it's contents will be NULLs, bad.
|
|
if xfs_bmap $file | grep 'no extents' > /dev/null
|
|
then
|
|
echo corrupt file $file - non-zero size but no extents
|
|
else
|
|
rm -f $file
|
|
fi
|
|
else
|
|
echo file $file has incorrect size - sync failed
|
|
fi
|
|
else
|
|
echo file $file missing - sync failed
|
|
fi
|
|
let i=$i+1
|
|
done
|
|
}
|
|
|
|
# create files and sync them
|
|
i=1;
|
|
while [ $i -lt 1000 ]
|
|
do
|
|
file=$SCRATCH_MNT/$i
|
|
xfs_io -f -c "pwrite -b 32k -S 0xff 0 32k" $file > /dev/null
|
|
if [ $? -ne 0 ]
|
|
then
|
|
echo error creating/writing file $file
|
|
exit
|
|
fi
|
|
let i=$i+1
|
|
done
|
|
|
|
# sync, then shutdown immediately after, then remount and test
|
|
sync
|
|
src/godown $SCRATCH_MNT
|
|
umount $SCRATCH_MNT
|
|
_scratch_mount
|
|
umount $SCRATCH_MNT
|
|
if [ ! _check_scratch_fs ]
|
|
then
|
|
echo error detected in filesystem
|
|
exit
|
|
fi
|
|
_scratch_mount
|
|
_check_files
|
|
|
|
status=0
|
|
exit
|