mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
2fd273886b
Create a new helper function to discover the minimum log size that will work with the mkfs options provided, then remove all the hardcoded block sizes from various xfs tests. This will be necessary when we turn on reflink or rmap by default and the minimum log size increases. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Tested-by: Yang Xu<xuyang2018.jy@cn.fujitsu.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
120 lines
3.2 KiB
Bash
Executable File
120 lines
3.2 KiB
Bash
Executable File
#! /bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
# Copyright (c) Red Hat, Inc. All Rights Reserved.
|
|
#
|
|
# FS QA Test No. 291
|
|
#
|
|
# Test xfs_repair on fragmented multi-block dir2 fs
|
|
#
|
|
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.*
|
|
}
|
|
|
|
# get standard environment, filters and checks
|
|
. ./common/rc
|
|
. ./common/filter
|
|
|
|
_supported_fs xfs
|
|
_supported_os Linux
|
|
|
|
# real QA test starts here
|
|
rm -f $seqres.full
|
|
_require_scratch
|
|
logblks=$(_scratch_find_xfs_min_logblocks -n size=16k -d size=133m)
|
|
_scratch_mkfs_xfs -n size=16k -l size=${logblks}b -d size=133m >> $seqres.full 2>&1
|
|
_scratch_mount
|
|
|
|
# First we cause very badly fragmented freespace, then
|
|
# make some multiblock directories in the filesystem, which
|
|
# should come out very fragmented as a result
|
|
|
|
# Step 1: Cause badly fragmented free space
|
|
#
|
|
# XXX: this needs to be factored to match what generic/204 does to support
|
|
# different inode sizes without ENOSPC
|
|
mkdir $SCRATCH_MNT/fragdir
|
|
for I in `seq 0 26200`; do
|
|
(echo data > $SCRATCH_MNT/fragdir/f$I) >> $seqres.full 2>&1
|
|
done
|
|
sync
|
|
|
|
for I in `seq 0 2 26200`; do
|
|
rm -f $SCRATCH_MNT/fragdir/f$I >> $seqres.full 2>&1
|
|
done
|
|
sync
|
|
|
|
# Soak up any remaining freespace
|
|
$XFS_IO_PROG -f -c "pwrite 0 16m" -c "fsync" $SCRATCH_MNT/space_file.large >> $seqres.full 2>&1
|
|
|
|
# Take a look at freespace for any post-mortem on the test
|
|
_scratch_unmount
|
|
_scratch_xfs_db -r -c freesp >> $seqres.full 2>&1
|
|
_scratch_mount
|
|
|
|
# Step 2: Make a bunch of (hopefully fragmented) multiblock
|
|
# dir2 directories
|
|
|
|
# - FMT_LOCAL
|
|
mkdir $SCRATCH_MNT/S_IFDIR.FMT_LOCAL
|
|
touch $SCRATCH_MNT/S_IFDIR.FMT_LOCAL/localdirfile
|
|
|
|
# - FMT_EXTENTS
|
|
mkdir $SCRATCH_MNT/S_IFDIR.FMT_EXTENTS
|
|
for I in `seq 1 100`; do
|
|
touch $SCRATCH_MNT/S_IFDIR.FMT_EXTENTS/extent_dir_file_$I
|
|
done
|
|
# With a few missing
|
|
for I in `seq 10 2 20` 100; do
|
|
rm -f $SCRATCH_MNT/S_IFDIR.FMT_EXTENTS/extent_dir_file_$I
|
|
done
|
|
|
|
# - FMT_BTREE
|
|
mkdir $SCRATCH_MNT/S_IFDIR.FMT_BTREE
|
|
for I in `seq 1 1000`; do
|
|
touch $SCRATCH_MNT/S_IFDIR.FMT_BTREE/btree_dir_file_$I
|
|
done
|
|
# With a few missing
|
|
for I in `seq 10 2 20` 1000; do
|
|
rm -f $SCRATCH_MNT/S_IFDIR.FMT_BTREE/btree_dir_file_$I
|
|
done
|
|
|
|
# Dave's special hack - grow freespace tree
|
|
mkdir $SCRATCH_MNT/S_IFDIR.FMT_BTREE2
|
|
for I in `seq 1 5000`; do
|
|
touch $SCRATCH_MNT/S_IFDIR.FMT_BTREE2/btree2_dir_file_$I
|
|
done
|
|
# Remove every other (odds)
|
|
for I in `seq 1 2 5000`; do
|
|
rm -f $SCRATCH_MNT/S_IFDIR.FMT_BTREE2/btree2_dir_file_$I
|
|
done
|
|
|
|
_scratch_unmount
|
|
# Can xfs_repair and xfs_check cope with this monster?
|
|
_scratch_xfs_repair >> $seqres.full 2>&1 || _fail "xfs_repair failed"
|
|
_xfs_check $SCRATCH_DEV >> $seqres.full 2>&1 || _fail "xfs_check failed"
|
|
|
|
# Yes they can! Now...
|
|
# Can xfs_metadump cope with this monster?
|
|
_scratch_metadump $tmp.metadump || _fail "xfs_metadump failed"
|
|
xfs_mdrestore $tmp.metadump $tmp.img || _fail "xfs_mdrestore failed"
|
|
[ "$USE_EXTERNAL" = yes ] && [ -n "$SCRATCH_RTDEV" ] && \
|
|
rt_repair_opts="-r $SCRATCH_RTDEV"
|
|
$XFS_REPAIR_PROG $rt_repair_opts -f $tmp.img >> $seqres.full 2>&1 || \
|
|
_fail "xfs_repair of metadump failed"
|
|
|
|
# Yes it can; success, all done
|
|
status=0
|
|
exit
|
|
|