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 >