fstests.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V2] fstests: verify that xfs_growfs can operate on mounted device node
@ 2019-12-17 22:34 Eric Sandeen
  2019-12-23  5:21 ` Zorro Lang
  0 siblings, 1 reply; 2+ messages in thread
From: Eric Sandeen @ 2019-12-17 22:34 UTC (permalink / raw)
  To: linux-xfs, fstests; +Cc: Zorro Lang

From: Eric Sandeen <sandeen@redhat.com>

The ability to use a mounted device node as the primary argument
to xfs_growfs was added back in with:
  7e8275f8 xfs_growfs: allow mounted device node as argument
because it was an undocumented behavior that some userspace depended on.
This test exercises that functionality.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
---

V2: Address Eryu's review concerns

diff --git a/tests/xfs/999 b/tests/xfs/999
new file mode 100755
index 00000000..186a29eb
--- /dev/null
+++ b/tests/xfs/999
@@ -0,0 +1,101 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2019 Red Hat, Inc.  All Rights Reserved.
+#
+# FS QA Test 999
+#
+# Test to ensure xfs_growfs command accepts device nodes if & only
+# if they are mounted.
+# This functionality, though undocumented, worked until xfsprogs v4.12
+# It was added back and documented after xfsprogs v5.2 via
+#   7e8275f8 xfs_growfs: allow mounted device node as argument
+#
+# Based on xfs/289
+#
+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
+
+loopfile=$TEST_DIR/fsfile
+mntdir=$TEST_DIR/mntdir
+loop_symlink=$TEST_DIR/loop_symlink.$$
+
+_cleanup()
+{
+    $UMOUNT_PROG $mntdir
+    [ -n "$loop_dev" ] && _destroy_loop_device $loop_dev
+    rmdir $mntdir
+    rm -f $loop_symlink
+    rm -f $loopfile
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# remove previous $seqres.full before test
+rm -f $seqres.full
+
+# real QA test starts here
+
+# Modify as appropriate.
+_supported_fs xfs
+_supported_os Linux
+_require_test
+_require_loop
+
+mkdir -p $mntdir || _fail "!!! failed to create temp mount dir"
+
+echo "=== mkfs.xfs ==="
+$MKFS_XFS_PROG -d file,name=$loopfile,size=16m -f >/dev/null 2>&1
+
+echo "=== truncate ==="
+$XFS_IO_PROG -fc "truncate 256m" $loopfile
+
+echo "=== create loop device ==="
+loop_dev=$(_create_loop_device $loopfile)
+
+echo "=== create loop device symlink ==="
+ln -s $loop_dev $loop_symlink
+
+echo "loop device is $loop_dev" >> $seqres.full
+
+# These unmounted operations should fail
+
+echo "=== xfs_growfs - unmounted device, command should be rejected ==="
+$XFS_GROWFS_PROG $loop_dev 2>&1 | sed -e s:$loop_dev:LOOPDEV:
+
+echo "=== xfs_growfs - check symlinked dev, unmounted ==="
+$XFS_GROWFS_PROG $loop_symlink 2>&1 | sed -e s:$loop_symlink:LOOPSYMLINK:
+
+# These mounted operations should pass
+
+echo "=== mount ==="
+$MOUNT_PROG $loop_dev $mntdir || _fail "!!! failed to loopback mount"
+
+echo "=== xfs_growfs - check device node ==="
+$XFS_GROWFS_PROG -D 8192 $loop_dev > /dev/null
+
+echo "=== xfs_growfs - check device symlink ==="
+$XFS_GROWFS_PROG -D 12288 $loop_symlink > /dev/null
+
+echo "=== unmount ==="
+$UMOUNT_PROG $mntdir || _fail "!!! failed to unmount"
+
+echo "=== mount device symlink ==="
+$MOUNT_PROG $loop_symlink $mntdir || _fail "!!! failed to loopback mount"
+
+echo "=== xfs_growfs - check device symlink ==="
+$XFS_GROWFS_PROG -D 16384 $loop_symlink > /dev/null
+
+echo "=== xfs_growfs - check device node ==="
+$XFS_GROWFS_PROG -D 20480 $loop_dev > /dev/null
+
+# success, all done
+status=0
+exit
diff --git a/tests/xfs/999.out b/tests/xfs/999.out
new file mode 100644
index 00000000..ababb892
--- /dev/null
+++ b/tests/xfs/999.out
@@ -0,0 +1,16 @@
+QA output created by 999
+=== mkfs.xfs ===
+=== truncate ===
+=== create loop device ===
+=== create loop device symlink ===
+=== xfs_growfs - unmounted device, command should be rejected ===
+xfs_growfs: LOOPDEV is not a mounted XFS filesystem
+=== xfs_growfs - check symlinked dev, unmounted ===
+xfs_growfs: LOOPSYMLINK is not a mounted XFS filesystem
+=== mount ===
+=== xfs_growfs - check device node ===
+=== xfs_growfs - check device symlink ===
+=== unmount ===
+=== mount device symlink ===
+=== xfs_growfs - check device symlink ===
+=== xfs_growfs - check device node ===
diff --git a/tests/xfs/group b/tests/xfs/group
index 4373d082..ff251002 100644
--- a/tests/xfs/group
+++ b/tests/xfs/group
@@ -508,3 +508,4 @@
 509 auto ioctl
 510 auto ioctl quick
 511 auto quick quota
+999 quick auto growfs


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH V2] fstests: verify that xfs_growfs can operate on mounted device node
  2019-12-17 22:34 [PATCH V2] fstests: verify that xfs_growfs can operate on mounted device node Eric Sandeen
@ 2019-12-23  5:21 ` Zorro Lang
  0 siblings, 0 replies; 2+ messages in thread
From: Zorro Lang @ 2019-12-23  5:21 UTC (permalink / raw)
  To: fstests; +Cc: linux-xfs

On Tue, Dec 17, 2019 at 04:34:07PM -0600, Eric Sandeen wrote:
> From: Eric Sandeen <sandeen@redhat.com>
> 
> The ability to use a mounted device node as the primary argument
> to xfs_growfs was added back in with:
>   7e8275f8 xfs_growfs: allow mounted device node as argument
> because it was an undocumented behavior that some userspace depended on.
> This test exercises that functionality.
> 
> Signed-off-by: Eric Sandeen <sandeen@redhat.com>
> ---

Looks good to me, and this case fails on old xfsprogs as expected, and test
passed after merge "7e8275f8 xfs_growfs: allow mounted device node as argument".

Reviewed-by: Zorro Lang <zlang@redhat.com>

> 
> V2: Address Eryu's review concerns
> 
> diff --git a/tests/xfs/999 b/tests/xfs/999
> new file mode 100755
> index 00000000..186a29eb
> --- /dev/null
> +++ b/tests/xfs/999
> @@ -0,0 +1,101 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2019 Red Hat, Inc.  All Rights Reserved.
> +#
> +# FS QA Test 999
> +#
> +# Test to ensure xfs_growfs command accepts device nodes if & only
> +# if they are mounted.
> +# This functionality, though undocumented, worked until xfsprogs v4.12
> +# It was added back and documented after xfsprogs v5.2 via
> +#   7e8275f8 xfs_growfs: allow mounted device node as argument
> +#
> +# Based on xfs/289
> +#
> +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
> +
> +loopfile=$TEST_DIR/fsfile
> +mntdir=$TEST_DIR/mntdir
> +loop_symlink=$TEST_DIR/loop_symlink.$$
> +
> +_cleanup()
> +{
> +    $UMOUNT_PROG $mntdir
> +    [ -n "$loop_dev" ] && _destroy_loop_device $loop_dev
> +    rmdir $mntdir
> +    rm -f $loop_symlink
> +    rm -f $loopfile
> +}
> +
> +# get standard environment, filters and checks
> +. ./common/rc
> +. ./common/filter
> +
> +# remove previous $seqres.full before test
> +rm -f $seqres.full
> +
> +# real QA test starts here
> +
> +# Modify as appropriate.
> +_supported_fs xfs
> +_supported_os Linux
> +_require_test
> +_require_loop
> +
> +mkdir -p $mntdir || _fail "!!! failed to create temp mount dir"
> +
> +echo "=== mkfs.xfs ==="
> +$MKFS_XFS_PROG -d file,name=$loopfile,size=16m -f >/dev/null 2>&1
> +
> +echo "=== truncate ==="
> +$XFS_IO_PROG -fc "truncate 256m" $loopfile
> +
> +echo "=== create loop device ==="
> +loop_dev=$(_create_loop_device $loopfile)
> +
> +echo "=== create loop device symlink ==="
> +ln -s $loop_dev $loop_symlink
> +
> +echo "loop device is $loop_dev" >> $seqres.full
> +
> +# These unmounted operations should fail
> +
> +echo "=== xfs_growfs - unmounted device, command should be rejected ==="
> +$XFS_GROWFS_PROG $loop_dev 2>&1 | sed -e s:$loop_dev:LOOPDEV:
> +
> +echo "=== xfs_growfs - check symlinked dev, unmounted ==="
> +$XFS_GROWFS_PROG $loop_symlink 2>&1 | sed -e s:$loop_symlink:LOOPSYMLINK:
> +
> +# These mounted operations should pass
> +
> +echo "=== mount ==="
> +$MOUNT_PROG $loop_dev $mntdir || _fail "!!! failed to loopback mount"
> +
> +echo "=== xfs_growfs - check device node ==="
> +$XFS_GROWFS_PROG -D 8192 $loop_dev > /dev/null
> +
> +echo "=== xfs_growfs - check device symlink ==="
> +$XFS_GROWFS_PROG -D 12288 $loop_symlink > /dev/null
> +
> +echo "=== unmount ==="
> +$UMOUNT_PROG $mntdir || _fail "!!! failed to unmount"
> +
> +echo "=== mount device symlink ==="
> +$MOUNT_PROG $loop_symlink $mntdir || _fail "!!! failed to loopback mount"
> +
> +echo "=== xfs_growfs - check device symlink ==="
> +$XFS_GROWFS_PROG -D 16384 $loop_symlink > /dev/null
> +
> +echo "=== xfs_growfs - check device node ==="
> +$XFS_GROWFS_PROG -D 20480 $loop_dev > /dev/null
> +
> +# success, all done
> +status=0
> +exit
> diff --git a/tests/xfs/999.out b/tests/xfs/999.out
> new file mode 100644
> index 00000000..ababb892
> --- /dev/null
> +++ b/tests/xfs/999.out
> @@ -0,0 +1,16 @@
> +QA output created by 999
> +=== mkfs.xfs ===
> +=== truncate ===
> +=== create loop device ===
> +=== create loop device symlink ===
> +=== xfs_growfs - unmounted device, command should be rejected ===
> +xfs_growfs: LOOPDEV is not a mounted XFS filesystem
> +=== xfs_growfs - check symlinked dev, unmounted ===
> +xfs_growfs: LOOPSYMLINK is not a mounted XFS filesystem
> +=== mount ===
> +=== xfs_growfs - check device node ===
> +=== xfs_growfs - check device symlink ===
> +=== unmount ===
> +=== mount device symlink ===
> +=== xfs_growfs - check device symlink ===
> +=== xfs_growfs - check device node ===
> diff --git a/tests/xfs/group b/tests/xfs/group
> index 4373d082..ff251002 100644
> --- a/tests/xfs/group
> +++ b/tests/xfs/group
> @@ -508,3 +508,4 @@
>  509 auto ioctl
>  510 auto ioctl quick
>  511 auto quick quota
> +999 quick auto growfs
> 


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2019-12-23  5:12 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-17 22:34 [PATCH V2] fstests: verify that xfs_growfs can operate on mounted device node Eric Sandeen
2019-12-23  5:21 ` Zorro Lang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).