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