Re: [PATCH v2 1/5] common: re-enable tests that require scratch dev on NFS

2014-11-18 Thread Omer Zilberberg
On 11/17/2014 10:22 PM, Dave Chinner wrote:
 On Mon, Nov 17, 2014 at 04:53:50PM +0200, Omer Zilberberg wrote:
 Another FYI: we can actually test any filesystem without a scratch
 device configured:

 $ sudo TEST_DEV=/dev/vda TEST_DIR=/mnt/test ./check generic/120
 FSTYP -- xfs (non-debug)
 PLATFORM  -- Linux/x86_64 test2 3.18.0-rc2-dgc+

 generic/120 16s ... [not run] this test requires a valid $SCRATCH_DEV
 Not run: generic/120
 Passed all 0 tests
 $

 Please note that since commit 83ef157d, that is no longer true, because 
 _require_test calls _is_block_dev with empty parameter, which prints usage:
 $ sudo TEST_DEV=/dev/sda TEST_DIR=/mnt/dev0  ./check generic/001
 FSTYP -- ext4
 PLATFORM  -- Linux/x86_64 testvm 3.17.0

 generic/001 7s ... - output mismatch (see 
 /opt/xfstests/results//generic/001.out.bad)
 --- tests/generic/001.out   2014-09-10 11:04:44.249185592 +0300
 +++ /opt/xfstests/results//generic/001.out.bad  2014-11-17 
 15:14:12.380061760 +0200
 @@ -1,4 +1,5 @@
  QA output created by 001
 +Usage: _is_block_dev dev
  cleanup
  setup 
  iter 1 chain ... check 
 ...
 (Run 'diff -u tests/generic/001.out 
 /opt/xfstests/results//generic/001.out.bad'  to see the entire diff)
 Ran: generic/001
 Failures: generic/001
 Failed 1 of 1 tests

 Here's a patch to fix that:
 
 Subject: [PATCH] _required_test: removed unneeded test for scratch_dev

 testing for scratch_dev in _required_test is unnecessary, since it is
 not required for these tests. Furthermore, if a scratch_dev is not given,
 all tests which are supposed to pass on test_dev fail, because
 _is_block_dev is given an empty string as scratch_dev, and prints usage.
 
 I'm beginning to sound like a broken record. Why isn't this *invalid
 config check* being done in the config parsing rather than on every
 test that requires a scratch or test device?
 
 i.e. removing the check is not the correct fix - checking it during
 config parsing means none of these checks need to be done in
 _require_test, nor in _require_scratch_nocheck.
 
 i.e. in get_next_config() we already know the FSTYP, so we should
 be checking that:
 
   a) TEST_DEV is valid for fstyp
   b) SCRATCH_DEV (if configured) is valid for fstyp
   c) TEST_DEV != SCRATCH_DEV if they both exist and fstyp
  indicates they should be block devices
 
 And then we can pretty much assume that they are valid everywhere
 else, and _require_scratch_nocheck() simply needs to check for a
 non-empty string...
 
 Signed-off-by: Omer Zilberberg o...@plexistor.com
 ---
  common/rc | 6 +-
  1 file changed, 1 insertion(+), 5 deletions(-)

 diff --git a/common/rc b/common/rc
 index d5e3aff..b863808 100644
 --- a/common/rc
 +++ b/common/rc
 @@ -1104,7 +1104,7 @@ _require_scratch()
  }
  
  
 -# this test needs a test partition - check we're ok  unmount it
 +# this test needs a test partition - check we're ok  mount if necessary
  #
  _require_test()
  {
 @@ -1138,10 +1138,6 @@ _require_test()
  then
  _notrun this test requires a valid \$TEST_DEV
  fi
 -if [ `_is_block_dev $SCRATCH_DEV` = `_is_block_dev 
 $TEST_DEV` ]
 -then
 -_notrun this test requires a valid \$TEST_DEV
 -fi
 if [ ! -d $TEST_DIR ]
 then
  _notrun this test requires a valid \$TEST_DIR
 
 The patch is whitespace damaged. Please read:
 
 https://www.kernel.org/doc/Documentation/email-clients.txt

Here's the patch resent with whitespace fixed, at least as a temporary 
solution...

Subject: [PATCH] _required_test: removed unneeded test for scratch_dev

testing for scratch_dev in _required_test is unnecessary, since it is
not required for these tests. Furthermore, if a scratch_dev is not given,
all tests which are supposed to pass on test_dev fail, because
_is_block_dev is given an empty string as scratch_dev, and prints usage.

Signed-off-by: Omer Zilberberg o...@plexistor.com
---
 common/rc | 6 +-
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/common/rc b/common/rc
index d5e3aff..b863808 100644
--- a/common/rc
+++ b/common/rc
@@ -1104,7 +1104,7 @@ _require_scratch()
 }
 
 
-# this test needs a test partition - check we're ok  unmount it
+# this test needs a test partition - check we're ok  mount if necessary
 #
 _require_test()
 {
@@ -1138,10 +1138,6 @@ _require_test()
 then
 _notrun this test requires a valid \$TEST_DEV
 fi
-if [ `_is_block_dev $SCRATCH_DEV` = `_is_block_dev 
$TEST_DEV` ]
-then
-_notrun this test requires a valid \$TEST_DEV
-fi
if [ ! -d $TEST_DIR ]
then
 _notrun this test requires a valid \$TEST_DIR

--

Re: [PATCH v2 1/5] common: re-enable tests that require scratch dev on NFS

2014-11-17 Thread Omer Zilberberg
 Another FYI: we can actually test any filesystem without a scratch
 device configured:
 
 $ sudo TEST_DEV=/dev/vda TEST_DIR=/mnt/test ./check generic/120
 FSTYP -- xfs (non-debug)
 PLATFORM  -- Linux/x86_64 test2 3.18.0-rc2-dgc+
 
 generic/120 16s ... [not run] this test requires a valid $SCRATCH_DEV
 Not run: generic/120
 Passed all 0 tests
 $

Please note that since commit 83ef157d, that is no longer true, because 
_require_test calls _is_block_dev with empty parameter, which prints usage:
$ sudo TEST_DEV=/dev/sda TEST_DIR=/mnt/dev0  ./check generic/001
FSTYP -- ext4
PLATFORM  -- Linux/x86_64 testvm 3.17.0

generic/001 7s ... - output mismatch (see 
/opt/xfstests/results//generic/001.out.bad)
--- tests/generic/001.out   2014-09-10 11:04:44.249185592 +0300
+++ /opt/xfstests/results//generic/001.out.bad  2014-11-17 
15:14:12.380061760 +0200
@@ -1,4 +1,5 @@
 QA output created by 001
+Usage: _is_block_dev dev
 cleanup
 setup 
 iter 1 chain ... check 
...
(Run 'diff -u tests/generic/001.out 
/opt/xfstests/results//generic/001.out.bad'  to see the entire diff)
Ran: generic/001
Failures: generic/001
Failed 1 of 1 tests

Here's a patch to fix that:

Subject: [PATCH] _required_test: removed unneeded test for scratch_dev

testing for scratch_dev in _required_test is unnecessary, since it is
not required for these tests. Furthermore, if a scratch_dev is not given,
all tests which are supposed to pass on test_dev fail, because
_is_block_dev is given an empty string as scratch_dev, and prints usage.

Signed-off-by: Omer Zilberberg o...@plexistor.com
---
 common/rc | 6 +-
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/common/rc b/common/rc
index d5e3aff..b863808 100644
--- a/common/rc
+++ b/common/rc
@@ -1104,7 +1104,7 @@ _require_scratch()
 }
 
 
-# this test needs a test partition - check we're ok  unmount it
+# this test needs a test partition - check we're ok  mount if necessary
 #
 _require_test()
 {
@@ -1138,10 +1138,6 @@ _require_test()
 then
 _notrun this test requires a valid \$TEST_DEV
 fi
-if [ `_is_block_dev $SCRATCH_DEV` = `_is_block_dev 
$TEST_DEV` ]
-then
-_notrun this test requires a valid \$TEST_DEV
-fi
if [ ! -d $TEST_DIR ]
then
 _notrun this test requires a valid \$TEST_DIR
-- 
1.9.3
--
To unsubscribe from this list: send the line unsubscribe linux-cifs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 1/5] common: re-enable tests that require scratch dev on NFS

2014-11-17 Thread Dave Chinner
On Mon, Nov 17, 2014 at 04:53:50PM +0200, Omer Zilberberg wrote:
  Another FYI: we can actually test any filesystem without a scratch
  device configured:
  
  $ sudo TEST_DEV=/dev/vda TEST_DIR=/mnt/test ./check generic/120
  FSTYP -- xfs (non-debug)
  PLATFORM  -- Linux/x86_64 test2 3.18.0-rc2-dgc+
  
  generic/120 16s ... [not run] this test requires a valid $SCRATCH_DEV
  Not run: generic/120
  Passed all 0 tests
  $
 
 Please note that since commit 83ef157d, that is no longer true, because 
 _require_test calls _is_block_dev with empty parameter, which prints usage:
 $ sudo TEST_DEV=/dev/sda TEST_DIR=/mnt/dev0  ./check generic/001
 FSTYP -- ext4
 PLATFORM  -- Linux/x86_64 testvm 3.17.0
 
 generic/001 7s ... - output mismatch (see 
 /opt/xfstests/results//generic/001.out.bad)
 --- tests/generic/001.out   2014-09-10 11:04:44.249185592 +0300
 +++ /opt/xfstests/results//generic/001.out.bad  2014-11-17 
 15:14:12.380061760 +0200
 @@ -1,4 +1,5 @@
  QA output created by 001
 +Usage: _is_block_dev dev
  cleanup
  setup 
  iter 1 chain ... check 
 ...
 (Run 'diff -u tests/generic/001.out 
 /opt/xfstests/results//generic/001.out.bad'  to see the entire diff)
 Ran: generic/001
 Failures: generic/001
 Failed 1 of 1 tests
 
 Here's a patch to fix that:
 
 Subject: [PATCH] _required_test: removed unneeded test for scratch_dev
 
 testing for scratch_dev in _required_test is unnecessary, since it is
 not required for these tests. Furthermore, if a scratch_dev is not given,
 all tests which are supposed to pass on test_dev fail, because
 _is_block_dev is given an empty string as scratch_dev, and prints usage.

I'm beginning to sound like a broken record. Why isn't this *invalid
config check* being done in the config parsing rather than on every
test that requires a scratch or test device?

i.e. removing the check is not the correct fix - checking it during
config parsing means none of these checks need to be done in
_require_test, nor in _require_scratch_nocheck.

i.e. in get_next_config() we already know the FSTYP, so we should
be checking that:

a) TEST_DEV is valid for fstyp
b) SCRATCH_DEV (if configured) is valid for fstyp
c) TEST_DEV != SCRATCH_DEV if they both exist and fstyp
   indicates they should be block devices

And then we can pretty much assume that they are valid everywhere
else, and _require_scratch_nocheck() simply needs to check for a
non-empty string...

 Signed-off-by: Omer Zilberberg o...@plexistor.com
 ---
  common/rc | 6 +-
  1 file changed, 1 insertion(+), 5 deletions(-)
 
 diff --git a/common/rc b/common/rc
 index d5e3aff..b863808 100644
 --- a/common/rc
 +++ b/common/rc
 @@ -1104,7 +1104,7 @@ _require_scratch()
  }
  
  
 -# this test needs a test partition - check we're ok  unmount it
 +# this test needs a test partition - check we're ok  mount if necessary
  #
  _require_test()
  {
 @@ -1138,10 +1138,6 @@ _require_test()
  then
  _notrun this test requires a valid \$TEST_DEV
  fi
 -if [ `_is_block_dev $SCRATCH_DEV` = `_is_block_dev 
 $TEST_DEV` ]
 -then
 -_notrun this test requires a valid \$TEST_DEV
 -fi
 if [ ! -d $TEST_DIR ]
 then
  _notrun this test requires a valid \$TEST_DIR

The patch is whitespace damaged. Please read:

https://www.kernel.org/doc/Documentation/email-clients.txt

and resend.

Cheers,

Dave.
-- 
Dave Chinner
da...@fromorbit.com
--
To unsubscribe from this list: send the line unsubscribe linux-cifs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 1/5] common: re-enable tests that require scratch dev on NFS

2014-11-16 Thread Dave Chinner
On Fri, Nov 14, 2014 at 11:02:50AM -0600, Steve French wrote:
 On Wed, Nov 12, 2014 at 9:33 PM, Dave Chinner da...@fromorbit.com wrote:
  On Wed, Nov 12, 2014 at 12:36:13PM -0600, Steve French wrote:
  On Fri, Oct 31, 2014 at 12:03 PM, Eryu Guan eg...@redhat.com wrote:
   This commit disables tests requires scratch dev running on NFS
  
   c041421 xfstests: stop special casing nfs and udf
  
   Now re-enable them to get a larger test coverage on NFS.
  
   Signed-off-by: Eryu Guan eg...@redhat.com
   ---
common/rc | 22 +++---
1 file changed, 19 insertions(+), 3 deletions(-)
  
   diff --git a/common/rc b/common/rc
   index 747cf72..ae03712 100644
   --- a/common/rc
   +++ b/common/rc
   @@ -551,6 +551,14 @@ _mkfs_dev()
rm -f $tmp_dir.mkfserr $tmp_dir.mkfsstd
}
  
   +# remove all files in $SCRATCH_MNT, useful when testing on NFS/CIFS
   +_scratch_cleanup_files()
   +{
   +   _scratch_mount
   +   rm -rf $SCRATCH_MNT/*
   +   _scratch_unmount
   +}
 
  There should be a check to make sure SCRATCH_MNT exists before you
  wipe the whole disk 
 
  so if no SCRATCH_MNT then this does rm -rf/*
  right ... (and wipes out your whole system ...)
 
  You can't get to that function until after all the checks that
  SCRATCH_MNT exists. i.e. this happens during _scratch_mkfs, and that
  is only called in tests after all the startup checks validate
  devices and mounts exist. i.e. see common/config::get_next_config()
 
 Well, I reproduced it easily enough again today (after taking a
 snapshot of the VM)
 by simply running generic/120 against NFS with SCRATCH_MNT not
 specified in local.config
 Dros also ran into this problem.

tests/generic/120 does this:


_require_scratch
_scratch_mkfs 

So we call:

_require_scratch
  _require_scratch_nocheck

case $FSTYP in
nfs*)   
 
echo $SCRATCH_DEV | grep -q :/  /dev/null 21   
 
if [ -z $SCRATCH_DEV -o $? != 0 ]; 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 $SCRATCH_MNT is empty, then it should fail right there. An empty
string gives:

$ if [ ! -d  ]; then
 echo foo
 fi
foo
$

before it gets anywhere near _scratch_mkfs. So, why isn't
generic/120 aborting during the _require_scratch check?

Cheers,

Dave.
-- 
Dave Chinner
da...@fromorbit.com
--
To unsubscribe from this list: send the line unsubscribe linux-cifs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 1/5] common: re-enable tests that require scratch dev on NFS

2014-11-16 Thread Dave Chinner
On Sat, Nov 15, 2014 at 01:35:33PM +0800, Eryu Guan wrote:
 On Fri, Nov 14, 2014 at 11:02:50AM -0600, Steve French wrote:
  On Wed, Nov 12, 2014 at 9:33 PM, Dave Chinner da...@fromorbit.com wrote:
   On Wed, Nov 12, 2014 at 12:36:13PM -0600, Steve French wrote:
   On Fri, Oct 31, 2014 at 12:03 PM, Eryu Guan eg...@redhat.com wrote:
This commit disables tests requires scratch dev running on NFS
   
c041421 xfstests: stop special casing nfs and udf
   
Now re-enable them to get a larger test coverage on NFS.
   
Signed-off-by: Eryu Guan eg...@redhat.com
---
 common/rc | 22 +++---
 1 file changed, 19 insertions(+), 3 deletions(-)
   
diff --git a/common/rc b/common/rc
index 747cf72..ae03712 100644
--- a/common/rc
+++ b/common/rc
@@ -551,6 +551,14 @@ _mkfs_dev()
 rm -f $tmp_dir.mkfserr $tmp_dir.mkfsstd
 }
   
+# remove all files in $SCRATCH_MNT, useful when testing on NFS/CIFS
+_scratch_cleanup_files()
+{
+   _scratch_mount
+   rm -rf $SCRATCH_MNT/*
+   _scratch_unmount
+}
  
   There should be a check to make sure SCRATCH_MNT exists before you
   wipe the whole disk 
  
   so if no SCRATCH_MNT then this does rm -rf/*
   right ... (and wipes out your whole system ...)
  
   You can't get to that function until after all the checks that
   SCRATCH_MNT exists. i.e. this happens during _scratch_mkfs, and that
   is only called in tests after all the startup checks validate
   devices and mounts exist. i.e. see common/config::get_next_config()
  
  Well, I reproduced it easily enough again today (after taking a
  snapshot of the VM)
  by simply running generic/120 against NFS with SCRATCH_MNT not
  specified in local.config
  Dros also ran into this problem.
 
 You're right, I missed that _scratch_mkfs is also called by ./check,
 and if there's no SCRATCH_MNT set in local.config, only SCRATCH_DEV is
 set, _scratch_mkfs can be dangerous.

As I asked earlier in this thread: why isn't get_next_config()
catching this?

 I propose this patch, which skips _scratch_cleanup_files if called by check
 
 [root@hp-dl388eg8-01 xfstests]# git diff
 diff --git a/common/rc b/common/rc
 index 435f74f..254fb66 100644
 --- a/common/rc
 +++ b/common/rc
 @@ -554,6 +554,11 @@ _mkfs_dev()
  # remove all files in $SCRATCH_MNT, useful when testing on NFS/CIFS
  _scratch_cleanup_files()
  {
 +   # do nothing if called by check, variables are not fully valided yet
 +   # SCRATCH_MNT can be empty, which is dangerous
 +   if [ $iam == check ]; then
 +   return
 +   fi

Again, this is the wrong place to try to fix this - we haven't fixed
the landmine that has left us running with an invalid config. IOWs,
by the time _scratch_mkfs is called from *anywhere* we should have
fully validated the environment to be correct and valid. Parsing and
validating the config we have loaded from the config file is the job
of get_next_config(), yes?

Cheers,

Dave.
-- 
Dave Chinner
da...@fromorbit.com
--
To unsubscribe from this list: send the line unsubscribe linux-cifs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 1/5] common: re-enable tests that require scratch dev on NFS

2014-11-16 Thread Eryu Guan
On Mon, Nov 17, 2014 at 04:41:41PM +1100, Dave Chinner wrote:
 On Sat, Nov 15, 2014 at 01:35:33PM +0800, Eryu Guan wrote:
  On Fri, Nov 14, 2014 at 11:02:50AM -0600, Steve French wrote:
   On Wed, Nov 12, 2014 at 9:33 PM, Dave Chinner da...@fromorbit.com wrote:
On Wed, Nov 12, 2014 at 12:36:13PM -0600, Steve French wrote:
On Fri, Oct 31, 2014 at 12:03 PM, Eryu Guan eg...@redhat.com wrote:
 This commit disables tests requires scratch dev running on NFS

 c041421 xfstests: stop special casing nfs and udf

 Now re-enable them to get a larger test coverage on NFS.

 Signed-off-by: Eryu Guan eg...@redhat.com
 ---
  common/rc | 22 +++---
  1 file changed, 19 insertions(+), 3 deletions(-)

 diff --git a/common/rc b/common/rc
 index 747cf72..ae03712 100644
 --- a/common/rc
 +++ b/common/rc
 @@ -551,6 +551,14 @@ _mkfs_dev()
  rm -f $tmp_dir.mkfserr $tmp_dir.mkfsstd
  }

 +# remove all files in $SCRATCH_MNT, useful when testing on NFS/CIFS
 +_scratch_cleanup_files()
 +{
 +   _scratch_mount
 +   rm -rf $SCRATCH_MNT/*
 +   _scratch_unmount
 +}
   
There should be a check to make sure SCRATCH_MNT exists before you
wipe the whole disk 
   
so if no SCRATCH_MNT then this does rm -rf/*
right ... (and wipes out your whole system ...)
   
You can't get to that function until after all the checks that
SCRATCH_MNT exists. i.e. this happens during _scratch_mkfs, and that
is only called in tests after all the startup checks validate
devices and mounts exist. i.e. see common/config::get_next_config()
   
   Well, I reproduced it easily enough again today (after taking a
   snapshot of the VM)
   by simply running generic/120 against NFS with SCRATCH_MNT not
   specified in local.config
   Dros also ran into this problem.
  
  You're right, I missed that _scratch_mkfs is also called by ./check,
  and if there's no SCRATCH_MNT set in local.config, only SCRATCH_DEV is
  set, _scratch_mkfs can be dangerous.
 
 As I asked earlier in this thread: why isn't get_next_config()
 catching this?

I think I see the problem, this patch catches the empty SCRATCH_MNT
and works for me:

eguan@dhcp-13-216:~/workspace/src/xfstests$ git diff
diff --git a/common/config b/common/config
index 1cb08c0..409f1b8 100644
--- a/common/config
+++ b/common/config
@@ -464,7 +464,7 @@ get_next_config() {
exit 1
fi
 
-   if [ ! -z $SCRATCH_MNT -a ! -d $SCRATCH_MNT ]; then
+   if [ ! -z $SCRATCH_MNT -o ! -d $SCRATCH_MNT ]; then
echo common/config: Error: \$SCRATCH_MNT ($SCRATCH_MNT) is not 
a directory
exit 1
fi

If it looks sane I will send out a patch.

 
  I propose this patch, which skips _scratch_cleanup_files if called by check
  
  [root@hp-dl388eg8-01 xfstests]# git diff
  diff --git a/common/rc b/common/rc
  index 435f74f..254fb66 100644
  --- a/common/rc
  +++ b/common/rc
  @@ -554,6 +554,11 @@ _mkfs_dev()
   # remove all files in $SCRATCH_MNT, useful when testing on NFS/CIFS
   _scratch_cleanup_files()
   {
  +   # do nothing if called by check, variables are not fully valided yet
  +   # SCRATCH_MNT can be empty, which is dangerous
  +   if [ $iam == check ]; then
  +   return
  +   fi
 
 Again, this is the wrong place to try to fix this - we haven't fixed
 the landmine that has left us running with an invalid config. IOWs,
 by the time _scratch_mkfs is called from *anywhere* we should have
 fully validated the environment to be correct and valid. Parsing and
 validating the config we have loaded from the config file is the job
 of get_next_config(), yes?

Yes, that makes more sense, thanks for the explanation!

Thanks,
Eryu
 
 Cheers,
 
 Dave.
 -- 
 Dave Chinner
 da...@fromorbit.com
 --
 To unsubscribe from this list: send the line unsubscribe fstests in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line unsubscribe linux-cifs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 1/5] common: re-enable tests that require scratch dev on NFS

2014-11-16 Thread Dave Chinner
On Mon, Nov 17, 2014 at 02:06:03PM +0800, Eryu Guan wrote:
 On Mon, Nov 17, 2014 at 04:41:41PM +1100, Dave Chinner wrote:
  On Sat, Nov 15, 2014 at 01:35:33PM +0800, Eryu Guan wrote:
   On Fri, Nov 14, 2014 at 11:02:50AM -0600, Steve French wrote:
On Wed, Nov 12, 2014 at 9:33 PM, Dave Chinner da...@fromorbit.com 
wrote:
 On Wed, Nov 12, 2014 at 12:36:13PM -0600, Steve French wrote:
 On Fri, Oct 31, 2014 at 12:03 PM, Eryu Guan eg...@redhat.com wrote:
  This commit disables tests requires scratch dev running on NFS
 
  c041421 xfstests: stop special casing nfs and udf
 
  Now re-enable them to get a larger test coverage on NFS.
 
  Signed-off-by: Eryu Guan eg...@redhat.com
  ---
   common/rc | 22 +++---
   1 file changed, 19 insertions(+), 3 deletions(-)
 
  diff --git a/common/rc b/common/rc
  index 747cf72..ae03712 100644
  --- a/common/rc
  +++ b/common/rc
  @@ -551,6 +551,14 @@ _mkfs_dev()
   rm -f $tmp_dir.mkfserr $tmp_dir.mkfsstd
   }
 
  +# remove all files in $SCRATCH_MNT, useful when testing on 
  NFS/CIFS
  +_scratch_cleanup_files()
  +{
  +   _scratch_mount
  +   rm -rf $SCRATCH_MNT/*
  +   _scratch_unmount
  +}

 There should be a check to make sure SCRATCH_MNT exists before you
 wipe the whole disk 

 so if no SCRATCH_MNT then this does rm -rf/*
 right ... (and wipes out your whole system ...)

 You can't get to that function until after all the checks that
 SCRATCH_MNT exists. i.e. this happens during _scratch_mkfs, and that
 is only called in tests after all the startup checks validate
 devices and mounts exist. i.e. see common/config::get_next_config()

Well, I reproduced it easily enough again today (after taking a
snapshot of the VM)
by simply running generic/120 against NFS with SCRATCH_MNT not
specified in local.config
Dros also ran into this problem.
   
   You're right, I missed that _scratch_mkfs is also called by ./check,
   and if there's no SCRATCH_MNT set in local.config, only SCRATCH_DEV is
   set, _scratch_mkfs can be dangerous.
  
  As I asked earlier in this thread: why isn't get_next_config()
  catching this?
 
 I think I see the problem, this patch catches the empty SCRATCH_MNT
 and works for me:
 
 eguan@dhcp-13-216:~/workspace/src/xfstests$ git diff
 diff --git a/common/config b/common/config
 index 1cb08c0..409f1b8 100644
 --- a/common/config
 +++ b/common/config
 @@ -464,7 +464,7 @@ get_next_config() {
 exit 1
 fi
  
 -   if [ ! -z $SCRATCH_MNT -a ! -d $SCRATCH_MNT ]; then
 +   if [ ! -z $SCRATCH_MNT -o ! -d $SCRATCH_MNT ]; then

if (not an empty string OR not a directory)

That doesn't work if you define $SCRATCH_MNT - the directory check
fails on an empty string.

As it is, this isn't solving the underlying problem - that empty
string check is to avoid failing configs that are not configured
with a scratch device.  i.e. if you define SCRATCH_MNT, it must be a
directory. However, there's no check that if you define SCRATCH_DEV
you've also defined a SCRATCH_MNT...

IOWs, the underlying problem here is that SCRATCH_DEV is defined,
but SCRATCH_MNT is not and we are not catching that issue.  FYI, the
setup script is used for checking these sorts of things.  e.g.  with
an empty config:

$ sudo ./setup
Warning: need to define parameters for host test2
   or set variables:
   TEST_DIR TEST_DEV
$

And you'll note that it catches when we only have one of the two
necessary TEST_D* variables set.  However, even with XFS as the
probe fstyp, it doesn't error out if I don't define a SCRATCH_MNT:

$ sudo TEST_DEV=/dev/vda TEST_DIR=/mnt/test SCRATCH_DEV=/dev/vdb
./setup
TEST: DIR=/mnt/test DEV=/dev/vda rt=[] log=[]
TAPE: dev=[] rmt=[] rmtirix=[@]
SCRATCH: MNT= DEV=/dev/vdb rt=[/dev/vdc] log=[/dev/vdd]
VARIABLES: external=no largeblk=no fstyp=xfs
   large_scratch_dev=no attrsecure=no
$ 

But it should fail with a sane error message indicating that we
caught the invalid config and didn't leave check to fail randomly
wiht some downstream error like:

$ sudo TEST_DEV=/dev/vda TEST_DIR=/mnt/test SCRATCH_DEV=/dev/vdb ./check 
generic/120

check: failed to mount $SCRATCH_DEV using specified options
Passed all 0 tests
$

Another FYI: we can actually test any filesystem without a scratch
device configured:

$ sudo TEST_DEV=/dev/vda TEST_DIR=/mnt/test ./check generic/120
FSTYP -- xfs (non-debug)
PLATFORM  -- Linux/x86_64 test2 3.18.0-rc2-dgc+

generic/120 16s ... [not run] this test requires a valid $SCRATCH_DEV
Not run: generic/120
Passed all 0 tests
$

So, really, all we need to do is ensure that SCRATCH_DEV/SCRATCH_MNT
are sanely configured...

Cheers,

Dave.
-- 
Dave Chinner
da...@fromorbit.com
--
To unsubscribe from this list: send the line unsubscribe linux-cifs in
the body of a message to 

Re: [PATCH v2 1/5] common: re-enable tests that require scratch dev on NFS

2014-11-14 Thread Steve French
On Wed, Nov 12, 2014 at 9:33 PM, Dave Chinner da...@fromorbit.com wrote:
 On Wed, Nov 12, 2014 at 12:36:13PM -0600, Steve French wrote:
 On Fri, Oct 31, 2014 at 12:03 PM, Eryu Guan eg...@redhat.com wrote:
  This commit disables tests requires scratch dev running on NFS
 
  c041421 xfstests: stop special casing nfs and udf
 
  Now re-enable them to get a larger test coverage on NFS.
 
  Signed-off-by: Eryu Guan eg...@redhat.com
  ---
   common/rc | 22 +++---
   1 file changed, 19 insertions(+), 3 deletions(-)
 
  diff --git a/common/rc b/common/rc
  index 747cf72..ae03712 100644
  --- a/common/rc
  +++ b/common/rc
  @@ -551,6 +551,14 @@ _mkfs_dev()
   rm -f $tmp_dir.mkfserr $tmp_dir.mkfsstd
   }
 
  +# remove all files in $SCRATCH_MNT, useful when testing on NFS/CIFS
  +_scratch_cleanup_files()
  +{
  +   _scratch_mount
  +   rm -rf $SCRATCH_MNT/*
  +   _scratch_unmount
  +}

 There should be a check to make sure SCRATCH_MNT exists before you
 wipe the whole disk 

 so if no SCRATCH_MNT then this does rm -rf/*
 right ... (and wipes out your whole system ...)

 You can't get to that function until after all the checks that
 SCRATCH_MNT exists. i.e. this happens during _scratch_mkfs, and that
 is only called in tests after all the startup checks validate
 devices and mounts exist. i.e. see common/config::get_next_config()

Well, I reproduced it easily enough again today (after taking a
snapshot of the VM)
by simply running generic/120 against NFS with SCRATCH_MNT not
specified in local.config
Dros also ran into this problem.

The patch below fixes it for me but it wasn't immediately obvious how to best
return info to the user (ie print messages that make sense here -
echo seems to be supressed
in common/rc and notrun exits and logs it to a file but not to the
screen in this case)

sfrench@ubuntu:~/xfstests$ git diff -a
diff --git a/common/rc b/common/rc
index d5e3aff..866244b 100644
--- a/common/rc
+++ b/common/rc
@@ -555,6 +555,9 @@ _mkfs_dev()
 _scratch_cleanup_files()
 {
_scratch_mount
+   if ! [ $SCRATCH_MNT ]; then
+   _notrun this test requires a \$SCRATCH_MNT to be specified
+   fi
rm -rf $SCRATCH_MNT/*
_scratch_unmount
 }


-- 
Thanks,

Steve
--
To unsubscribe from this list: send the line unsubscribe linux-cifs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 1/5] common: re-enable tests that require scratch dev on NFS

2014-11-14 Thread Eryu Guan
On Fri, Nov 14, 2014 at 11:02:50AM -0600, Steve French wrote:
 On Wed, Nov 12, 2014 at 9:33 PM, Dave Chinner da...@fromorbit.com wrote:
  On Wed, Nov 12, 2014 at 12:36:13PM -0600, Steve French wrote:
  On Fri, Oct 31, 2014 at 12:03 PM, Eryu Guan eg...@redhat.com wrote:
   This commit disables tests requires scratch dev running on NFS
  
   c041421 xfstests: stop special casing nfs and udf
  
   Now re-enable them to get a larger test coverage on NFS.
  
   Signed-off-by: Eryu Guan eg...@redhat.com
   ---
common/rc | 22 +++---
1 file changed, 19 insertions(+), 3 deletions(-)
  
   diff --git a/common/rc b/common/rc
   index 747cf72..ae03712 100644
   --- a/common/rc
   +++ b/common/rc
   @@ -551,6 +551,14 @@ _mkfs_dev()
rm -f $tmp_dir.mkfserr $tmp_dir.mkfsstd
}
  
   +# remove all files in $SCRATCH_MNT, useful when testing on NFS/CIFS
   +_scratch_cleanup_files()
   +{
   +   _scratch_mount
   +   rm -rf $SCRATCH_MNT/*
   +   _scratch_unmount
   +}
 
  There should be a check to make sure SCRATCH_MNT exists before you
  wipe the whole disk 
 
  so if no SCRATCH_MNT then this does rm -rf/*
  right ... (and wipes out your whole system ...)
 
  You can't get to that function until after all the checks that
  SCRATCH_MNT exists. i.e. this happens during _scratch_mkfs, and that
  is only called in tests after all the startup checks validate
  devices and mounts exist. i.e. see common/config::get_next_config()
 
 Well, I reproduced it easily enough again today (after taking a
 snapshot of the VM)
 by simply running generic/120 against NFS with SCRATCH_MNT not
 specified in local.config
 Dros also ran into this problem.

You're right, I missed that _scratch_mkfs is also called by ./check,
and if there's no SCRATCH_MNT set in local.config, only SCRATCH_DEV is
set, _scratch_mkfs can be dangerous.

[root@hp-dl388eg8-01 xfstests]# ./check -nfs generic/001
FSTYP -- nfs
PLATFORM  -- Linux/x86_64 hp-dl388eg8-01 3.18.0-rc4+
MKFS_OPTIONS  -- -bsize=4096 localhost:/mnt/nfsscratch
MOUNT_OPTIONS -- -o context=system_u:object_r:nfs_t:s0 localhost:/mnt/nfsscratch

our local _scratch_mkfs routine ...
mount: can't find localhost:/mnt/nfsscratch in /etc/fstab
rm -rf /*
umount: localhost:/mnt/nfsscratch: mountpoint not found
check: failed to mkfs $SCRATCH_DEV using specified options
Passed all 0 tests

(I replaced the real rm -rf ... by echo 'rm -rf ...' in above test)

 
 The patch below fixes it for me but it wasn't immediately obvious how to best
 return info to the user (ie print messages that make sense here -
 echo seems to be supressed
 in common/rc and notrun exits and logs it to a file but not to the
 screen in this case)
 
 sfrench@ubuntu:~/xfstests$ git diff -a
 diff --git a/common/rc b/common/rc
 index d5e3aff..866244b 100644
 --- a/common/rc
 +++ b/common/rc
 @@ -555,6 +555,9 @@ _mkfs_dev()
  _scratch_cleanup_files()
  {
 _scratch_mount
 +   if ! [ $SCRATCH_MNT ]; then
 +   _notrun this test requires a \$SCRATCH_MNT to be specified
 +   fi
 rm -rf $SCRATCH_MNT/*
 _scratch_unmount
  }

I propose this patch, which skips _scratch_cleanup_files if called by check

[root@hp-dl388eg8-01 xfstests]# git diff
diff --git a/common/rc b/common/rc
index 435f74f..254fb66 100644
--- a/common/rc
+++ b/common/rc
@@ -554,6 +554,11 @@ _mkfs_dev()
 # remove all files in $SCRATCH_MNT, useful when testing on NFS/CIFS
 _scratch_cleanup_files()
 {
+   # do nothing if called by check, variables are not fully valided yet
+   # SCRATCH_MNT can be empty, which is dangerous
+   if [ $iam == check ]; then
+   return
+   fi
_scratch_mount
rm -rf $SCRATCH_MNT/*
_scratch_unmount

Thanks,
Eryu
--
To unsubscribe from this list: send the line unsubscribe linux-cifs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 1/5] common: re-enable tests that require scratch dev on NFS

2014-11-12 Thread Steve French
There should be a check to make sure SCRATCH_MNT exists before you
wipe the whole disk 

+# remove all files in $SCRATCH_MNT, useful when testing on NFS/CIFS
+_scratch_cleanup_files()
+{
+   _scratch_mount
+   rm -rf $SCRATCH_MNT/*
+   _scratch_unmount
+}
+
so if no SCRATCH_MNT then this does rm -rf/*
right ... (and wipes out your whole system ...)

On Fri, Oct 31, 2014 at 12:03 PM, Eryu Guan eg...@redhat.com wrote:
 This commit disables tests requires scratch dev running on NFS

 c041421 xfstests: stop special casing nfs and udf

 Now re-enable them to get a larger test coverage on NFS.

 Signed-off-by: Eryu Guan eg...@redhat.com
 ---
  common/rc | 22 +++---
  1 file changed, 19 insertions(+), 3 deletions(-)

 diff --git a/common/rc b/common/rc
 index 747cf72..ae03712 100644
 --- a/common/rc
 +++ b/common/rc
 @@ -551,6 +551,14 @@ _mkfs_dev()
  rm -f $tmp_dir.mkfserr $tmp_dir.mkfsstd
  }

 +# remove all files in $SCRATCH_MNT, useful when testing on NFS/CIFS
 +_scratch_cleanup_files()
 +{
 +   _scratch_mount
 +   rm -rf $SCRATCH_MNT/*
 +   _scratch_unmount
 +}
 +
  _scratch_mkfs()
  {
  case $FSTYP in
 @@ -558,7 +566,9 @@ _scratch_mkfs()
  _scratch_mkfs_xfs $*
 ;;
  nfs*)
 -   # do nothing for nfs
 +   # unable to re-create NFS, just remove all files in $SCRATCH_MNT to
 +   # avoid EEXIST caused by the leftover files created in previous runs
 +_scratch_cleanup_files
 ;;
  cifs)
 # do nothing for cifs
 @@ -1032,8 +1042,14 @@ _require_scratch_nocheck()
  {
  case $FSTYP in
 nfs*)
 - _notrun requires a scratch device
 -;;
 +   echo $SCRATCH_DEV | grep -q :/  /dev/null 21
 +   if [ -z $SCRATCH_DEV -o $? != 0 ]; then
 +   _notrun this test requires a valid \$SCRATCH_DEV
 +   fi
 +   if [ ! -d $SCRATCH_MNT ]; then
 +   _notrun this test requires a valid \$SCRATCH_MNT
 +   fi
 +   ;;
 cifs)
 _notrun requires a scratch device
 ;;
 --
 1.9.3

 --
 To unsubscribe from this list: send the line unsubscribe linux-nfs in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html



-- 
Thanks,

Steve
--
To unsubscribe from this list: send the line unsubscribe linux-cifs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 1/5] common: re-enable tests that require scratch dev on NFS

2014-11-12 Thread Dave Chinner
On Wed, Nov 12, 2014 at 12:36:13PM -0600, Steve French wrote:
 On Fri, Oct 31, 2014 at 12:03 PM, Eryu Guan eg...@redhat.com wrote:
  This commit disables tests requires scratch dev running on NFS
 
  c041421 xfstests: stop special casing nfs and udf
 
  Now re-enable them to get a larger test coverage on NFS.
 
  Signed-off-by: Eryu Guan eg...@redhat.com
  ---
   common/rc | 22 +++---
   1 file changed, 19 insertions(+), 3 deletions(-)
 
  diff --git a/common/rc b/common/rc
  index 747cf72..ae03712 100644
  --- a/common/rc
  +++ b/common/rc
  @@ -551,6 +551,14 @@ _mkfs_dev()
   rm -f $tmp_dir.mkfserr $tmp_dir.mkfsstd
   }
 
  +# remove all files in $SCRATCH_MNT, useful when testing on NFS/CIFS
  +_scratch_cleanup_files()
  +{
  +   _scratch_mount
  +   rm -rf $SCRATCH_MNT/*
  +   _scratch_unmount
  +}

 There should be a check to make sure SCRATCH_MNT exists before you
 wipe the whole disk 
 
 so if no SCRATCH_MNT then this does rm -rf/*
 right ... (and wipes out your whole system ...)

You can't get to that function until after all the checks that
SCRATCH_MNT exists. i.e. this happens during _scratch_mkfs, and that
is only called in tests after all the startup checks validate
devices and mounts exist. i.e. see common/config::get_next_config()

Cheers,

Dave.
-- 
Dave Chinner
da...@fromorbit.com
--
To unsubscribe from this list: send the line unsubscribe linux-cifs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html