new file mode 100755
@@ -0,0 +1,110 @@
+#! /bin/bash
+# FS QA Test No. 062
+#
+# Use the bstat utility to verify bulkstat finds all inodes in a filesystem.
+# Test under various inode counts, inobt record layouts and bulkstat batch
+# sizes.
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2014 Red Hat, 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.*
+}
+
+# print the number of inodes counted by bulkstat
+_bstat_count()
+{
+ batchsize=$1
+ ./src/bstat $SCRATCH_MNT $batchsize | grep ino | wc -l
+}
+
+# print bulkstat counts using varied batch sizes
+_bstat_test()
+{
+ expect=`find $SCRATCH_MNT -print | wc -l`
+ echo "expect $expect"
+
+ _bstat_count 4096
+ _bstat_count 32
+ _bstat_count 1
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+_require_scratch
+
+# real QA test starts here
+
+_supported_fs xfs
+_supported_os Linux
+
+rm -f $seqres.full
+
+DIRCOUNT=8
+INOCOUNT=$((2048 / DIRCOUNT))
+
+_scratch_mkfs "-d agcount=$DIRCOUNT" >> $seqres.full 2>&1 || _fail "mkfs failed"
+_scratch_mount
+
+# create a set of directories and fill each with a fixed number of files
+for dir in $(seq 1 $DIRCOUNT); do
+ mkdir -p $SCRATCH_MNT/$dir
+ for i in $(seq 1 $INOCOUNT); do
+ touch $SCRATCH_MNT/$dir/$i
+ done
+done
+_bstat_test
+
+# remove every other file from each dir
+for dir in $(seq 1 $DIRCOUNT); do
+ for i in $(seq 2 2 $INOCOUNT); do
+ rm -f $SCRATCH_MNT/$dir/$i
+ done
+done
+_bstat_test
+
+# remove the entire second half of files
+for dir in $(seq 1 $DIRCOUNT); do
+ for i in $(seq $((INOCOUNT / 2)) $INOCOUNT); do
+ rm -f $SCRATCH_MNT/$dir/$i
+ done
+done
+_bstat_test
+
+# remove all regular files
+for dir in $(seq 1 $DIRCOUNT); do
+ rm -f $SCRATCH_MNT/$dir/*
+done
+_bstat_test
+
+# success, all done
+status=0
+exit
new file mode 100644
@@ -0,0 +1,17 @@
+QA output created by 062
+expect 2057
+2057
+2057
+2057
+expect 1033
+1033
+1033
+1033
+expect 521
+521
+521
+521
+expect 9
+9
+9
+9
@@ -58,6 +58,7 @@
059 dump ioctl auto quick
060 dump ioctl auto quick
061 dump ioctl auto quick
+062 auto ioctl quick
063 dump attr auto quick
064 dump auto
065 dump auto
The bulkstat mechanism is used by xfsdump and other tools to index all inodes allocated in a filesystem. Run some simple tests with varying inode layouts and bulkstat batch sizes to verify bulkstat finds the expected number of inodes. Signed-off-by: Brian Foster <bfoster@redhat.com> --- Here's a test based on some of the review discussion for Dave's recent bulkstat fixup. This doesn't reproduce problems in current code (perhaps it can be enhanced to detect some of the original problems?), but it detects some tricky regressions found during the development cycle and only takes a few seconds to run. Brian tests/xfs/062 | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/xfs/062.out | 17 +++++++++ tests/xfs/group | 1 + 3 files changed, 128 insertions(+) create mode 100755 tests/xfs/062 create mode 100644 tests/xfs/062.out