]> git-server-git.apps.pok.os.sepia.ceph.com Git - xfstests-dev.git/commitdiff
xfs: test xfs_growfs with too-small size expansion
authorZorro Lang <zlang@kernel.org>
Sun, 28 Jan 2024 15:56:53 +0000 (23:56 +0800)
committerZorro Lang <zlang@kernel.org>
Mon, 5 Feb 2024 06:21:21 +0000 (14:21 +0800)
This's a regression test of 84712492e6da ("xfs: short circuit
xfs_growfs_data_private() if delta is zero").

If try to do growfs with "too-small" size expansion, might lead to a
delta of "0" in xfs_growfs_data_private(), then end up in the shrink
case and emit the EXPERIMENTAL warning even if we're not changing
anything at all.

Signed-off-by: Zorro Lang <zlang@redhat.com>
Reviewed-by: David Disseldorp <ddiss@suse.de>
Signed-off-by: Zorro Lang <zlang@kernel.org>
tests/xfs/606 [new file with mode: 0755]
tests/xfs/606.out [new file with mode: 0644]

diff --git a/tests/xfs/606 b/tests/xfs/606
new file mode 100755 (executable)
index 0000000..d52a93d
--- /dev/null
@@ -0,0 +1,56 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2024 Red Hat, Inc.  All Rights Reserved.
+#
+# FS QA Test No. 606
+#
+# Test xfs_growfs with "too-small" size expansion, which lead to a delta of "0"
+# in xfs_growfs_data_private. This's a regression test of 84712492e6da ("xfs:
+# short circuit xfs_growfs_data_private() if delta is zero").
+#
+. ./common/preamble
+_begin_fstest auto quick growfs
+
+_cleanup()
+{
+       local dev
+       $UMOUNT_PROG $LOOP_MNT 2>/dev/null
+       dev=$(losetup -j testfile | cut -d: -f1)
+       losetup -d $dev 2>/dev/null
+       rm -rf $LOOP_IMG $LOOP_MNT
+       cd /
+       rm -f $tmp.*
+}
+
+# real QA test starts here
+_supported_fs xfs
+_fixed_by_kernel_commit 84712492e6da \
+       "xfs: short circuit xfs_growfs_data_private() if delta is zero"
+_require_test
+_require_loop
+_require_xfs_io_command "truncate"
+_require_command "$XFS_GROWFS_PROG" xfs_growfs
+
+LOOP_IMG=$TEST_DIR/$seq.dev
+LOOP_MNT=$TEST_DIR/$seq.mnt
+rm -rf $LOOP_IMG $LOOP_MNT
+mkdir -p $LOOP_MNT
+
+# 1G image
+$XFS_IO_PROG -f -c "truncate 1073741824" $LOOP_IMG
+$MKFS_XFS_PROG -f $LOOP_IMG >$seqres.full
+# Extend by just 8K, expected to start with the last full-size AG ends of
+# above 1G block device.
+$XFS_IO_PROG -f -c "truncate 1073750016" $LOOP_IMG
+_mount -oloop $LOOP_IMG $LOOP_MNT
+# A known bug shows "XFS_IOC_FSGROWFSDATA xfsctl failed: No space left on
+# device" at here, refer to _fixed_by_kernel_commit above
+$XFS_GROWFS_PROG $LOOP_MNT >$seqres.full
+if [ $? -ne 0 ];then
+       echo "xfs_growfs fails!"
+fi
+
+echo "Silence is golden"
+# success, all done
+status=0
+exit
diff --git a/tests/xfs/606.out b/tests/xfs/606.out
new file mode 100644 (file)
index 0000000..09bf888
--- /dev/null
@@ -0,0 +1,2 @@
+QA output created by 606
+Silence is golden