Files
apfstests/tests/xfs/271
T
Darrick J. Wong 5c076a5adb xfs/271: fix test failure on non-reflink filesystems
This test creates an empty filesystem with rmap btrees enabled, and then
checks that GETFSMAP corresponds (roughly) with what we expect mkfs to
have written to the filesystem.

Unfortunately, the test's calculation for the number of "per-AG
metadata" extents is not quite correct.  For a filesystem with a
refcount btree, the rmapbt and agfl blocks will be reported separately,
but for non-reflink filesystems, GETFSMAP merges the records.

Since this test counts the number of records, fix the calculation.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Chandan Babu R <chandanrlinux@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
2021-03-08 00:32:16 +08:00

78 lines
2.7 KiB
Bash
Executable File

#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2016, Oracle and/or its affiliates. All Rights Reserved.
#
# FS QA Test No. 271
#
# Check that getfsmap reports the AG metadata we're expecting.
#
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 -rf "$tmp".* $TEST_DIR/fsmap $TEST_DIR/testout
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
# real QA test starts here
_supported_fs xfs
_require_xfs_scratch_rmapbt
_require_xfs_io_command "fsmap"
rm -f "$seqres.full"
echo "Format and mount"
_scratch_mkfs > "$seqres.full" 2>&1
_scratch_mount
agcount=$(_xfs_mount_agcount $SCRATCH_MNT)
# mkfs lays out btree root blocks in the order bnobt, cntbt, inobt, finobt,
# rmapbt, refcountbt, and then allocates AGFL blocks. Since GETFSMAP has the
# same owner (per-AG metadata) for rmap btree blocks and blocks on the AGFL and
# the reverse mapping index merges records, the number of per-AG extents
# reported will vary depending on whether the refcount btree is enabled.
$XFS_INFO_PROG $SCRATCH_MNT | grep -q reflink=1
has_reflink=$(( 1 - $? ))
perag_metadata_exts=2
test $has_reflink -gt 0 && perag_metadata_exts=$((perag_metadata_exts + 1))
echo "Get fsmap" | tee -a $seqres.full
$XFS_IO_PROG -c 'fsmap -v' $SCRATCH_MNT > $TEST_DIR/fsmap
cat $TEST_DIR/fsmap >> $seqres.full
echo "Check AG header" | tee -a $seqres.full
grep 'static fs metadata[[:space:]]*[0-9]*[[:space:]]*(0\.\.' $TEST_DIR/fsmap | tee -a $seqres.full > $TEST_DIR/testout
_within_tolerance "AG header count" $(wc -l < $TEST_DIR/testout) $agcount 0 -v
echo "Check freesp/rmap btrees" | tee -a $seqres.full
grep 'per-AG metadata[[:space:]]*[0-9]*[[:space:]]*([0-9]*\.\.' $TEST_DIR/fsmap | tee -a $seqres.full > $TEST_DIR/testout
_within_tolerance "freesp extent count" $(wc -l < $TEST_DIR/testout) $((agcount * perag_metadata_exts)) 0 999999 -v
echo "Check inode btrees" | tee -a $seqres.full
grep 'inode btree[[:space:]]*[0-9]*[[:space:]]*([0-9]*\.\.' $TEST_DIR/fsmap | tee -a $seqres.full > $TEST_DIR/testout
_within_tolerance "inode btree extent count" $(wc -l < $TEST_DIR/testout) $agcount 0 -v
echo "Check inodes" | tee -a $seqres.full
grep 'inodes[[:space:]]*[0-9]*[[:space:]]*([0-9]*\.\.' $TEST_DIR/fsmap | tee -a $seqres.full > $TEST_DIR/testout
_within_tolerance "inode extent count" $(wc -l < $TEST_DIR/testout) 1 0 999999 -v
echo "Check journal" | tee -a $seqres.full
grep 'journalling log' $TEST_DIR/fsmap | tee -a $seqres.full > $TEST_DIR/testout
_within_tolerance "journal extent count" $(wc -l < $TEST_DIR/testout) 1 0 -v
# success, all done
status=0
exit