#! /bin/bash # SPDX-License-Identifier: GPL-2.0 # Copyright (c) 2021 Red Hat, Inc. All Rights Reserved. # # FS QA Test No. 163 # # XFS shrinkfs basic functionality test # # This test attempts to shrink with a small size (512K), half AG size and # an out-of-bound size (agsize + 1) to observe if it works as expected. # . ./common/preamble _begin_fstest auto quick growfs shrinkfs # Import common functions. . ./common/filter test_shrink() { $XFS_GROWFS_PROG -D"$1" $SCRATCH_MNT >> $seqres.full 2>&1 ret=$? _scratch_unmount _check_scratch_fs _scratch_mount $XFS_INFO_PROG $SCRATCH_MNT 2>&1 | _filter_mkfs 2>$tmp.growfs >/dev/null . $tmp.growfs [ $ret -eq 0 -a $1 -eq $dblocks ] } # real QA test starts here _supported_fs xfs _require_scratch_xfs_shrink echo "Format and mount" # agcount = 1 is forbidden on purpose, and need to ensure shrinking to # 2 AGs isn't feasible yet. So agcount = 3 is the minimum number now. _scratch_mkfs -dsize="$((512 * 1024 * 1024))" -dagcount=3 2>&1 | \ tee -a $seqres.full | _filter_mkfs 2>$tmp.mkfs >/dev/null . $tmp.mkfs t_dblocks=$dblocks _scratch_mount >> $seqres.full echo "Shrink fs (small size)" test_shrink $((t_dblocks-512*1024/dbsize)) || \ echo "Shrink fs (small size) failure" echo "Shrink fs (half AG)" test_shrink $((t_dblocks-agsize/2)) || \ echo "Shrink fs (half AG) failure" echo "Shrink fs (out-of-bound)" test_shrink $((t_dblocks-agsize-1)) && \ echo "Shrink fs (out-of-bound) failure" [ $dblocks -ne $((t_dblocks-agsize/2)) ] && \ echo "dblocks changed after shrinking failure" $XFS_INFO_PROG $SCRATCH_MNT >> $seqres.full echo "*** done" # success, all done status=0 exit