Re: [PATCH V2] fstests: verify that xfs_growfs can operate on mounted device node

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Dec 17, 2019 at 04:34:07PM -0600, Eric Sandeen wrote:
> From: Eric Sandeen <sandeen@xxxxxxxxxx>
> 
> 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@xxxxxxxxxx>
> ---

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@xxxxxxxxxx>

> 
> 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
> 




[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux