All of lore.kernel.org
 help / color / mirror / Atom feed
* xfstests - SCRATCH_DIR mounted/unmounted twice when testing nfs
@ 2011-05-18 12:41 Boris Ranto
  2011-05-19  0:02 ` Dave Chinner
  0 siblings, 1 reply; 4+ messages in thread
From: Boris Ranto @ 2011-05-18 12:41 UTC (permalink / raw)
  To: xfs

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

Alternatively, _setup_testdir could stop mounting SCRATCH_DEV but that would be probably too invasive.

Signed-off-by: Boris Ranto <branto@redhat.com>

diff --git a/common.rc b/common.rc
index e634fbb..6a701a6 100644
--- a/common.rc
+++ b/common.rc
@@ -227,6 +227,10 @@ _scratch_mount_options()
 
 _scratch_mount()
 {
+    if [ "$FSTYP" = "nfs" -a -n "$(_mount | grep $SCRATCH_DEV |grep
$SCRATCH_MNT)" ]
+    then
+       _scratch_unmount
+    fi
     _mount -t $FSTYP `_scratch_mount_options $*`
 }
 
@@ -1379,7 +1383,10 @@ _cleanup_testdir()
        ;;
     nfs*)
        # umount testdir as it is $SCRATCH_MNT which could be used by
xfs next
-       [ -n "$testdir" ] && $UMOUNT_PROG $testdir
+       if _mount | grep $SCRATCH_DEV |grep -q $testdir
+       then
+          [ -n "$testdir" ] && $UMOUNT_PROG $testdir
+       fi
        ;;
     *)
        # do nothing, testdir is $TEST_DIR

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

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

* Re: xfstests - SCRATCH_DIR mounted/unmounted twice when testing nfs
  2011-05-18 12:41 xfstests - SCRATCH_DIR mounted/unmounted twice when testing nfs Boris Ranto
@ 2011-05-19  0:02 ` Dave Chinner
  2011-05-19 11:49   ` Boris Ranto
  0 siblings, 1 reply; 4+ messages in thread
From: Dave Chinner @ 2011-05-19  0:02 UTC (permalink / raw)
  To: Boris Ranto; +Cc: xfs

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

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

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

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

* Re: xfstests - SCRATCH_DIR mounted/unmounted twice when testing nfs
  2011-05-19  0:02 ` Dave Chinner
@ 2011-05-19 11:49   ` Boris Ranto
  2011-05-23 12:51     ` Boris Ranto
  0 siblings, 1 reply; 4+ messages in thread
From: Boris Ranto @ 2011-05-19 11:49 UTC (permalink / raw)
  To: Dave Chinner; +Cc: xfs

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@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

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

* Re: xfstests - SCRATCH_DIR mounted/unmounted twice when testing nfs
  2011-05-19 11:49   ` Boris Ranto
@ 2011-05-23 12:51     ` Boris Ranto
  0 siblings, 0 replies; 4+ messages in thread
From: Boris Ranto @ 2011-05-23 12:51 UTC (permalink / raw)
  To: Dave Chinner; +Cc: xfs

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@oss.sgi.com
> 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@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

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

end of thread, other threads:[~2011-05-23 12:51 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-05-18 12:41 xfstests - SCRATCH_DIR mounted/unmounted twice when testing nfs Boris Ranto
2011-05-19  0:02 ` Dave Chinner
2011-05-19 11:49   ` Boris Ranto
2011-05-23 12:51     ` Boris Ranto

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.