Re: xfstests - SCRATCH_DIR mounted/unmounted twice when testing nfs

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

 



On Thu, 2011-05-19 at 13:49 +0200, Boris Ranto wrote:
> On Thu, 2011-05-19 at 10:02 +1000, Dave Chinner wrote:
> > On Wed, May 18, 2011 at 12:41:38PM +0000, Boris Ranto wrote:
> > > Tests 124, 127 and 128 unmount their SCRATCH_DEV manually while using _cleanup_testdir in trapped cleanup function.
> > > This can lead to test fails due to double unmount on nfs where _cleanup_testdir unmounts SCRATCH_DEV.
> > > 
> > > Tests 129 and 130 use _setup_testdir and _scratch_mount that can lead to double mount on nfs where _setup_testdir mounts SCRATCH_DEV.
> > > 
> > > The least invasive patch (only nfs shall be affected by this patch) I could come up with that fixed this issue used conditional umounts in _cleanup_testdir and conditional mount/remount in _scratch_mount (remount was used so that mount flags do not get lost).
> > > 
> > From the code:
> > 
> > #
> > # Warning for UDF and NFS:
> > # this function calls _setup_udf_scratchdir and _setup_udf_scratchdir
> > # which actually uses the scratch dir for the test dir.
> > #
> > # This was done because testdir was intended to be a persistent
> > # XFS only partition.  This should eventually change, and treat
> > # at least local filesystems all the same.
> > #
> > 
> > I think that this means that the way _setup_testdir uses the scratch
> > device was a nasty hack and was intended to be fixed at some point.
> > Perhaps we should actually understand the issue that lead to this
> > hack first, and then determine what is needed to fix it rather than
> > just layering more hacks on top of it?
> > 
> > > Alternatively, _setup_testdir could stop mounting SCRATCH_DEV but
> > > that would be probably too invasive.
> > 
> > I don't really care about how invasive fixing the problem
> > properly is if it's the better long term solution....
> 
> I also prefer that solution. The fix could be relatively simple: just
> treat nfs as regular local filesystem. The question is whether there are
> any test cases that depends on the old _setup_testdir behaviour.
> 
> Looking through the tests I found two tests that have nfs in their
> _supported_fs field: 062 and 192.
> 
> 062 expects scratch dev to be regular device and hence fails for nfs
> either way. Therefore restricting the test to xfs (maybe +udf) shouldn't
> cause any problems.
> 
> 192 uses TEST_DIR directly so it probably expects TEST_DIR to be mounted
> xfs filesystem, therefore just changing _supported_fs to xfs (maybe
> +udf) should be sufficient.
> 
> 
> > Cheers,
> > 
> > Dave.
> 
> 
> So far I could test the following patch (nfs only, udf unchanged) on few
> tests with success. I'll let it run for all the tests and report back
> later if it still makes sense.
> 
> diff --git a/062 b/062
> index 5cb6f92..83644be 100755
> --- a/062
> +++ b/062
> @@ -71,7 +71,7 @@ _create_test_bed()
>  }
>  
>  # real QA test starts here
> -_supported_fs xfs udf nfs
> +_supported_fs xfs
>  _supported_os Linux
>  
>  _require_scratch
>  
> diff --git a/192 b/192
> index d8301d5..1e582d1 100755
> --- a/192
> +++ b/192
> @@ -45,7 +45,7 @@ _access_time()
>  
>  # real QA test starts here
>  
> -_supported_fs xfs udf nfs
> +_supported_fs xfs
>  _supported_os Linux
>  #delay=150
>  #delay=75
> diff --git a/common.rc b/common.rc
> index e634fbb..3d1a17b 100644
> --- a/common.rc
> +++ b/common.rc
> @@ -302,7 +302,10 @@ _scratch_mkfs()
>          _scratch_mkfs_xfs $*
>  	;;
>      nfs*)
> -	# do nothing for nfs
> +       # clean scratch dir
> +       _scratch_mount
> +       rm -rf $SCRATCH_MNT/* $SCRATCH_MNT/.*
> +       _scratch_unmount
>  	;;
>      udf)
>          $MKFS_UDF_PROG $MKFS_OPTIONS $* $SCRATCH_DEV > /dev/null
> @@ -703,6 +706,10 @@ _require_scratch()
>  		 then
>  		     _notrun "this test requires a valid \$SCRATCH_DEV"
>  		 fi
> +		 if [ ! -d "$SCRATCH_MNT" ]
> +		 then
> +		     _notrun "this test requires a valid \$SCRATCH_MNT"
> +		 fi
>  		 ;;
>  	*)
>  		 if [ -z "$SCRATCH_DEV" -o "`_is_block_dev $SCRATCH_DEV`" = "" ]
> @@ -1320,35 +1327,9 @@ _setup_udf_scratchdir()
>      testdir=$SCRATCH_MNT
>  }
>  
> -_setup_nfs_scratchdir()
> -{
> -    [ "$FSTYP" != "nfs" ] \
> -	&& _fail "setup_nfs_testdir: \$FSTYP is not nfs"
> -    [ -z "$SCRATCH_DEV" ] \
> -	&& _notrun "this test requires a valid host fs for \$SCRATCH_DEV"
> -    [ -z "$SCRATCH_MNT" ] \
> -	&& _notrun "this test requires a valid \$SCRATCH_MNT"
> -
> -    # mounted?
> -    if _mount | grep -q $SCRATCH_DEV
> -    then
> -        # if it's mounted, make sure its on $SCRATCH_MNT
> -        if ! _mount | grep $SCRATCH_DEV | grep -q $SCRATCH_MNT
> -        then
> -            _fail "\$SCRATCH_DEV is mounted but not on \$SCRATCH_MNT -
> aborting"
> -        fi
> -    	$UMOUNT_PROG $SCRATCH_DEV
> -    fi
> -
> -    _scratch_mkfs
> -    _scratch_mount
> -
> -    testdir=$SCRATCH_MNT
> -}
> -
>  #
> -# Warning for UDF and NFS:
> -# this function calls _setup_udf_scratchdir and _setup_udf_scratchdir
> +# Warning for UDF:
> +# this function calls _setup_udf_scratchdir
>  # which actually uses the scratch dir for the test dir.
>  #
>  # This was done because testdir was intended to be a persistent
> @@ -1361,9 +1342,6 @@ _setup_testdir()
>      udf)
>  	_setup_udf_scratchdir
>  	;;
> -    nfs*)
> -	_setup_nfs_scratchdir
> -	;;
>      *)
>  	testdir=$TEST_DIR
>  	;;
> @@ -1377,10 +1355,6 @@ _cleanup_testdir()
>  	# umount testdir as it is $SCRATCH_MNT which could be used by xfs next
>  	[ -n "$testdir" ] && $UMOUNT_PROG $testdir
>  	;;
> -    nfs*)
> -	# umount testdir as it is $SCRATCH_MNT which could be used by xfs next
> -	[ -n "$testdir" ] && $UMOUNT_PROG $testdir
> -	;;
>      *)
>  	# do nothing, testdir is $TEST_DIR
>  	:
> 
> _______________________________________________
> xfs mailing list
> xfs@xxxxxxxxxxx
> http://oss.sgi.com/mailman/listinfo/xfs

I've tested the patch with all the tests. Since neither nfs TEST_DEV nor
SCRATCH_DEV are block devices tests 076 and 240 fail for nfs. All the
other tests worked fine for me.

This could be fixed by including _requrie_block_dev:

diff --git a/076 b/076
index e472b26..630d6f4 100755
--- a/076
+++ b/076
@@ -57,6 +57,7 @@ _supported_fs generic
 _supported_os IRIX Linux
 
 _require_scratch
+_require_block_dev $SCRATCH_DEV
 
 echo "*** init fs"
 
diff --git a/240 b/240
index 563449e..11e5180 100755
--- a/240
+++ b/240
@@ -52,6 +52,7 @@ _supported_fs generic
 _supported_os Linux
 
 _require_sparse_files
+_require_block_dev $TEST_DEV
 
 echo "Silence is golden."
 
diff --git a/common.rc b/common.rc
index bc76812..5ea5a78 100644
--- a/common.rc
+++ b/common.rc
@@ -918,6 +918,15 @@ _require_sparse_files()
     esac
 }
 
+# Check if the device is block device
+#
+_require_block_dev()
+{
+       DEV=$1
+       [ "`_is_block_dev $DEV`" = "" ] && \
+               _notrun "Device $DEV is not block device"
+}
+
 # check that a FS on a device is mounted
 # if so, return mount point
 #

_______________________________________________
xfs mailing list
xfs@xxxxxxxxxxx
http://oss.sgi.com/mailman/listinfo/xfs


[Index of Archives]     [Linux XFS Devel]     [Linux Filesystem Development]     [Filesystem Testing]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux