mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
f220ab921e
Replace all the $MKFS_PROG.$FSTYP invocations with $MKFS_PROG -t $FSTYP. The mkfs wrapper binary knows how to search the user's $PATH to find the appropriate mkfs delegate, which the author uses to switch between development and distro versions of various tools. Unfortunately, using "$MKFS_PROG.$FSTYP" means that the shell only looks in the same directory as the mkfs wrapper, which means that we can end up mixing different tool versions when this is the case. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eryu Guan <guaneryu@gmail.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
155 lines
4.1 KiB
Bash
Executable File
155 lines
4.1 KiB
Bash
Executable File
#! /bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
# Copyright (c) 2018 Google, Inc. All Rights Reserved.
|
|
#
|
|
# FS QA Test ext4/032
|
|
#
|
|
# Ext4 online resize tests of small and crucial resizes with bigalloc
|
|
# feature.
|
|
#
|
|
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
|
|
|
|
BLK_SIZ=4096
|
|
CLUSTER_SIZ=4096
|
|
|
|
IMG_FILE=$SCRATCH_MNT/$seq.fs
|
|
IMG_MNT=$SCRATCH_MNT/$seq.mnt
|
|
|
|
## Num clusters to blocks.
|
|
c2b()
|
|
{
|
|
local clusters=$1
|
|
echo $(($clusters * $CLUSTER_SIZ / $BLK_SIZ))
|
|
}
|
|
|
|
ext4_online_resize()
|
|
{
|
|
## sizes are in number of blocks.
|
|
local original_size=$1
|
|
local final_size=$2
|
|
local check_if_supported=${3:-0}
|
|
|
|
## Start with a clean image file.
|
|
echo "" > ${IMG_FILE}
|
|
echo "+++ truncate image file to $final_size" | \
|
|
tee -a $seqres.full
|
|
$XFS_IO_PROG -f -c "truncate $(($final_size * $BLK_SIZ))" ${IMG_FILE}
|
|
LOOP_DEVICE=`_create_loop_device $IMG_FILE`
|
|
|
|
echo "+++ create fs on image file $original_size" | \
|
|
tee -a $seqres.full
|
|
|
|
${MKFS_PROG} -t ${FSTYP} -F -O bigalloc,resize_inode -C $CLUSTER_SIZ \
|
|
-b $BLK_SIZ ${LOOP_DEVICE} $original_size >> \
|
|
$seqres.full 2>&1 || _fail "mkfs failed"
|
|
|
|
echo "+++ mount image file" | tee -a $seqres.full
|
|
$MOUNT_PROG -t ${FSTYP} ${LOOP_DEVICE} ${IMG_MNT} > \
|
|
/dev/null 2>&1 || _fail "mount failed"
|
|
|
|
echo "+++ resize fs to $final_size" | tee -a $seqres.full
|
|
|
|
$RESIZE2FS_PROG -f ${LOOP_DEVICE} $final_size >$tmp.resize2fs 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
if [ $check_if_supported -eq 1 ]; then
|
|
grep -iq "operation not supported" $tmp.resize2fs \
|
|
&& _notrun "online resizing not supported with bigalloc"
|
|
fi
|
|
_fail "resize failed"
|
|
fi
|
|
cat $tmp.resize2fs >> $seqres.full
|
|
echo "+++ umount fs" | tee -a $seqres.full
|
|
$UMOUNT_PROG ${IMG_MNT}
|
|
|
|
echo "+++ check fs" | tee -a $seqres.full
|
|
_check_generic_filesystem $LOOP_DEVICE >> $seqres.full 2>&1 || \
|
|
_fail "fsck should not fail"
|
|
_destroy_loop_device $LOOP_DEVICE && LOOP_DEVICE=
|
|
}
|
|
|
|
_cleanup()
|
|
{
|
|
cd /
|
|
[ -n "$LOOP_DEVICE" ] && _destroy_loop_device $LOOP_DEVICE > /dev/null 2>&1
|
|
rm -f $tmp.*
|
|
$UMOUNT_PROG ${IMG_MNT} > /dev/null 2>&1
|
|
rm -f ${IMG_FILE} > /dev/null 2>&1
|
|
}
|
|
|
|
# get standard environment and checks
|
|
. ./common/rc
|
|
|
|
# remove previous $seqres.full before test
|
|
rm -f $seqres.full
|
|
|
|
# real QA test starts here
|
|
_supported_fs ext4
|
|
|
|
_require_loop
|
|
_require_scratch
|
|
# We use resize_inode to make sure that block group descriptor table
|
|
# can be extended.
|
|
_require_scratch_ext4_feature "bigalloc,resize_inode"
|
|
_require_command "$RESIZE2FS_PROG" resize2fs
|
|
|
|
_scratch_mkfs >>$seqres.full 2>&1
|
|
_scratch_mount
|
|
|
|
rm -f $seqres.full
|
|
|
|
mkdir -p $IMG_MNT || _fail "cannot create loopback mount point"
|
|
|
|
# Check if online resizing with bigalloc is supported by the kernel
|
|
ext4_online_resize 4096 8192 1
|
|
|
|
## We perform resizing to various multiples of block group sizes to
|
|
## ensure that we cover maximum edge cases in the kernel code.
|
|
for CLUSTER_SIZ in 4096 16384 65536; do
|
|
echo "++ set cluster size to $CLUSTER_SIZ" | tee -a $seqres.full
|
|
|
|
##
|
|
## Extend last group tests
|
|
##
|
|
|
|
## Extending a 1/2 block group to a 2/3 block group.
|
|
ext4_online_resize $(c2b 16384) $(c2b 24576)
|
|
## Extending a 2/3rd block group to one cluster less than a
|
|
## full block group.
|
|
ext4_online_resize $(c2b 24576) $(c2b 32767)
|
|
## Extending a 2/3rd block group to a full block group.
|
|
ext4_online_resize $(c2b 24576) $(c2b 32768)
|
|
|
|
##
|
|
## Extend last group and add more block groups.
|
|
##
|
|
|
|
## Extending a 2/3rd block group to 2 block groups.
|
|
ext4_online_resize $(c2b 24576) $(c2b 65536)
|
|
## Extending a 2/3rd block group to 15 block groups and one
|
|
## cluster.
|
|
ext4_online_resize $(c2b 24576) $(c2b 491521)
|
|
## Extending a 2/3rd block group to 15 and a half block groups.
|
|
ext4_online_resize $(c2b 24576) $(c2b 507904)
|
|
## Extending a 2/3rd block group to 16 block groups.
|
|
ext4_online_resize $(c2b 24576) $(c2b 524288)
|
|
## Extending a 2/3rd block group to 160 block groups.
|
|
ext4_online_resize $(c2b 24576) $(c2b 5242880)
|
|
|
|
##
|
|
## Convert to meta_bg.
|
|
##
|
|
|
|
## Extending a 2/3rd block group to 1280 block groups.
|
|
ext4_online_resize $(c2b 24576) $(c2b 41943040)
|
|
done
|
|
|
|
status=0
|
|
exit
|