X-Git-Url: http://git.apps.os.sepia.ceph.com/?p=xfstests-dev.git;a=blobdiff_plain;f=tests%2Fxfs%2F004;h=7633071cc4f07884e39935ba44df6979c48722f9;hp=d75c3c0e021bbe1d174e85ab756a39c43bfc1345;hb=d00cc974c77746dece9ad6eb90767683cd5bc4bd;hpb=fc48dfb96676c140ab371ab7723d59e3a4445d84 diff --git a/tests/xfs/004 b/tests/xfs/004 index d75c3c0e..7633071c 100755 --- a/tests/xfs/004 +++ b/tests/xfs/004 @@ -1,28 +1,13 @@ #! /bin/bash -# FS QA Test No. 004 -# -# exercise xfs_db bug #789674 and other freesp functionality -# -#----------------------------------------------------------------------- +# SPDX-License-Identifier: GPL-2.0 # Copyright (c) 2000-2002 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 +# FS QA Test No. 004 # -#----------------------------------------------------------------------- +# exercise xfs_db bug #789674 and other freesp functionality # - seq=`basename $0` +seqres=$RESULT_DIR/$seq echo "QA output created by $seq" here=`pwd` @@ -31,7 +16,7 @@ status=0 _cleanup() { - umount $SCRATCH_MNT + _scratch_unmount rm -f $tmp.* exit $status } @@ -39,74 +24,59 @@ trap "_cleanup" 0 1 2 3 15 _populate_scratch() { - echo "=== mkfs output ===" >>$seq.full - _scratch_mkfs_xfs | tee -a $seq.full | _filter_mkfs 2>$tmp.mkfs + echo "=== mkfs output ===" >>$seqres.full + _scratch_mkfs_xfs | tee -a $seqres.full | _filter_mkfs 2>$tmp.mkfs . $tmp.mkfs _scratch_mount + # This test looks at specific behaviors of the xfs_db freesp command, + # which reports on the contents of the free space btrees for the data + # device. Don't let anything get created on the realtime volume. + $XFS_IO_PROG -c 'chattr -t' $SCRATCH_MNT dd if=/dev/zero of=$SCRATCH_MNT/foo count=200 bs=4096 >/dev/null 2>&1 & dd if=/dev/zero of=$SCRATCH_MNT/goo count=400 bs=4096 >/dev/null 2>&1 & dd if=/dev/zero of=$SCRATCH_MNT/moo count=800 bs=4096 >/dev/null 2>&1 & wait - umount $SCRATCH_MNT # flush everything + _scratch_unmount # flush everything _scratch_mount # and then remount } - # get standard environment, filters and checks -. ./common.rc -. ./common.filter +. ./common/rc +. ./common/filter # real QA test starts here _supported_fs xfs -_supported_os IRIX Linux -_need_to_be_root _require_scratch _require_no_large_scratch_dev -rm -f $seq.full +rm -f $seqres.full _populate_scratch -[ "$HOSTOS" = "Linux" ] && DF_PROG="$DF_PROG -P --block-size=512" - -eval `$DF_PROG $SCRATCH_MNT 2>&1 \ +eval `$DF_PROG -P --block-size=512 $SCRATCH_MNT 2>&1 \ | tail -1 | $AWK_PROG '{ printf "blocks=%u used=%u avail=%u\n", $3, $4, $5 }'` -echo "df gave: blocks=$blocks used=$used avail=$avail" >>$seq.full -echo "blocksize from mkfs is '$dbsize'" >>$seq.full +echo "df gave: blocks=$blocks used=$used avail=$avail" >>$seqres.full +echo "blocksize from mkfs is '$dbsize'" >>$seqres.full -xfs_db -r -c "freesp -s" $SCRATCH_DEV >$tmp.xfs_db -echo "xfs_db for $SCRATCH_DEV" >>$seq.full -cat $tmp.xfs_db >>$seq.full +_scratch_xfs_db -r -c "freesp -s" >$tmp.xfs_db +echo "xfs_db for $SCRATCH_DEV" >>$seqres.full +cat $tmp.xfs_db >>$seqres.full eval `$XFS_IO_PROG -x -c resblks $SCRATCH_MNT 2>&1 \ | $AWK_PROG '/available/ { printf "resblks=%u\n", $5 }'` -echo "resblks gave: resblks=$resblks" >>$seq.full +echo "resblks gave: resblks=$resblks" >>$seqres.full # check the 'blocks' field from freesp command is OK -# since 2.6.18, df does not report the 4 blocks per AG that cannot -# be allocated, hence we check for that exact mismatch. -# since ~2.6.22, reserved blocks are used by default and df does -# not report them, hence check for an exact mismatch. perl -ne ' - BEGIN { $avail ='$avail' * 512; + BEGIN { $avail ='$avail' * 512 + ('$resblks' * '$dbsize'); $answer="(no xfs_db free blocks line?)" } /free blocks (\d+)$/ || next; $freesp = $1 * '$dbsize'; - if ($freesp == $avail) { + if ($freesp >= $avail) { $answer = "yes"; } else { - $avail = $avail + (('$agcount' + 1) * '$dbsize' * 4); - if ($freesp == $avail) { - $answer = "yes"; - } else { - $avail = $avail + ('$resblks' * '$dbsize'); - if ($freesp == $avail) { - $answer = "yes"; - } else { - $answer = "no ($freesp != $avail)"; - } - } + $answer = "no ($freesp < $avail)"; } END { print "$answer\n" } ' <$tmp.xfs_db >$tmp.ans