Re: [PATCH] btrfs/029: fix wrong usage of name filter

2017-08-31 Thread Eryu Guan
On Fri, Sep 01, 2017 at 09:44:59AM +0900, Misono, Tomohiro wrote:
> Ok. I will do that if you won't, though I'm not sure other combination of 
> filters would pose the similar problem.

Thanks! Then I'll test :)

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


Re: [PATCH] btrfs/029: fix wrong usage of name filter

2017-08-31 Thread Misono, Tomohiro
On 2017/08/31 16:33, Eryu Guan wrote:
> On Thu, Aug 31, 2017 at 08:53:09AM +0900, Misono, Tomohiro wrote:
>> On 2017/08/30 20:09, Eryu Guan wrote:
>>> On Wed, Aug 30, 2017 at 04:38:16PM +0900, Misono, Tomohiro wrote:
 btrfs/029 uses _filter_testdirs() to filter the name of $TEST_DIR and
 $SCRATCH_MNT directory.

 In this function, it calls both _filter_test_dir and _filter_scratch
 concatenapted by pipe. Therefore if $TEST_DIR is a prefix of
 $SCRATCH_MNT, this filter function gives wrong filtered name for
 $SCRATCH_MNT and the test fails.
>>>
>>> Sorry, I'm a bit confused, how could $TEST_DIR be a prefix of
>>> $SCRATCH_MNT? Won't that fail the test at setup time?
>>
>> I used "/mnt" for $TEST_DIR and "/mnt_scratch" for $SCRATCH_MNT and hit
>> this problem because "/mnt_scratch" is filtered to "$TEST_DIR_scrach"
>> instead of "$SCRATCH_MNT".
>>
>> I think these are valid directory names and other btrfs tests run correctly
>> with these names.
> 
> Ah, yes, that's possible and a valid (though not usual) test setup. The
> filter becomes complex when one string is prefix of another string, we
> have similar problems when filtering TEST_DIR vs TEST_DEV and
> SCRATCH_MNT vs SCRATCH_DEV in _filter_test_dir and _filter_scratch.
> 
> But the fix only works around btrfs/029, but there're other places we
> use the two filters together, like in _filter_quota, TEST_DIR filter
> results would be wrong if SCRATCH_MNT is a prefix of TEST_DIR, because
> in _filter_quota it calls _filter_scratch first.
> 
> I think one solution is that we filter the longer string first, e.g.
> move _filter_testdirs to common/filter and update it to something like:
> 
> # filter both test and scratch mount points and devices, but always
> # filter the longer string if the other string is a substring of the
> # first one.
> _filter_testdirs()
> {
>   if echo "$TEST_DIR" | grep -q "$SCRATCH_MNT"; then
>   _filter_test_dir | _filter_scratch
>   else
>   _filter_scratch | _filter_test_dir
>   fi
> }
> 
> And use this new helper when needed. I found 4 places that need update,
> they're btrfs/029, generic/409, generic/410, generic/411 and
> _filter_quota().
> 

Ok. I will do that if you won't, though I'm not sure other combination of 
filters would pose the similar problem.

Thanks,
Tomohiro

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


Re: [PATCH] btrfs/029: fix wrong usage of name filter

2017-08-31 Thread Eryu Guan
On Thu, Aug 31, 2017 at 08:53:09AM +0900, Misono, Tomohiro wrote:
> On 2017/08/30 20:09, Eryu Guan wrote:
> > On Wed, Aug 30, 2017 at 04:38:16PM +0900, Misono, Tomohiro wrote:
> >> btrfs/029 uses _filter_testdirs() to filter the name of $TEST_DIR and
> >> $SCRATCH_MNT directory.
> >>
> >> In this function, it calls both _filter_test_dir and _filter_scratch
> >> concatenapted by pipe. Therefore if $TEST_DIR is a prefix of
> >> $SCRATCH_MNT, this filter function gives wrong filtered name for
> >> $SCRATCH_MNT and the test fails.
> > 
> > Sorry, I'm a bit confused, how could $TEST_DIR be a prefix of
> > $SCRATCH_MNT? Won't that fail the test at setup time?
> 
> I used "/mnt" for $TEST_DIR and "/mnt_scratch" for $SCRATCH_MNT and hit
> this problem because "/mnt_scratch" is filtered to "$TEST_DIR_scrach"
> instead of "$SCRATCH_MNT".
> 
> I think these are valid directory names and other btrfs tests run correctly
> with these names.

Ah, yes, that's possible and a valid (though not usual) test setup. The
filter becomes complex when one string is prefix of another string, we
have similar problems when filtering TEST_DIR vs TEST_DEV and
SCRATCH_MNT vs SCRATCH_DEV in _filter_test_dir and _filter_scratch.

But the fix only works around btrfs/029, but there're other places we
use the two filters together, like in _filter_quota, TEST_DIR filter
results would be wrong if SCRATCH_MNT is a prefix of TEST_DIR, because
in _filter_quota it calls _filter_scratch first.

I think one solution is that we filter the longer string first, e.g.
move _filter_testdirs to common/filter and update it to something like:

# filter both test and scratch mount points and devices, but always
# filter the longer string if the other string is a substring of the
# first one.
_filter_testdirs()
{
if echo "$TEST_DIR" | grep -q "$SCRATCH_MNT"; then
_filter_test_dir | _filter_scratch
else
_filter_scratch | _filter_test_dir
fi
}

And use this new helper when needed. I found 4 places that need update,
they're btrfs/029, generic/409, generic/410, generic/411 and
_filter_quota().

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


Re: [PATCH] btrfs/029: fix wrong usage of name filter

2017-08-30 Thread Misono, Tomohiro
On 2017/08/30 20:09, Eryu Guan wrote:
> On Wed, Aug 30, 2017 at 04:38:16PM +0900, Misono, Tomohiro wrote:
>> btrfs/029 uses _filter_testdirs() to filter the name of $TEST_DIR and
>> $SCRATCH_MNT directory.
>>
>> In this function, it calls both _filter_test_dir and _filter_scratch
>> concatenapted by pipe. Therefore if $TEST_DIR is a prefix of
>> $SCRATCH_MNT, this filter function gives wrong filtered name for
>> $SCRATCH_MNT and the test fails.
> 
> Sorry, I'm a bit confused, how could $TEST_DIR be a prefix of
> $SCRATCH_MNT? Won't that fail the test at setup time?

I used "/mnt" for $TEST_DIR and "/mnt_scratch" for $SCRATCH_MNT and hit
this problem because "/mnt_scratch" is filtered to "$TEST_DIR_scrach"
instead of "$SCRATCH_MNT".

I think these are valid directory names and other btrfs tests run correctly
with these names.

Thanks,
Tomohiro

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


Re: [PATCH] btrfs/029: fix wrong usage of name filter

2017-08-30 Thread Eryu Guan
On Wed, Aug 30, 2017 at 04:38:16PM +0900, Misono, Tomohiro wrote:
> btrfs/029 uses _filter_testdirs() to filter the name of $TEST_DIR and
> $SCRATCH_MNT directory.
> 
> In this function, it calls both _filter_test_dir and _filter_scratch
> concatenated by pipe. Therefore if $TEST_DIR is a prefix of
> $SCRATCH_MNT, this filter function gives wrong filtered name for
> $SCRATCH_MNT and the test fails.

Sorry, I'm a bit confused, how could $TEST_DIR be a prefix of
$SCRATCH_MNT? Won't that fail the test at setup time?

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


[PATCH] btrfs/029: fix wrong usage of name filter

2017-08-30 Thread Misono, Tomohiro
btrfs/029 uses _filter_testdirs() to filter the name of $TEST_DIR and
$SCRATCH_MNT directory.

In this function, it calls both _filter_test_dir and _filter_scratch
concatenated by pipe. Therefore if $TEST_DIR is a prefix of
$SCRATCH_MNT, this filter function gives wrong filtered name for
$SCRATCH_MNT and the test fails.

Fix this by calling _filter_test_dir and _filter_scratch directly.

Signed-off-by: Tomohiro Misono 
---
 tests/btrfs/029 | 11 +++
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/tests/btrfs/029 b/tests/btrfs/029
index c390c95..74fded7 100755
--- a/tests/btrfs/029
+++ b/tests/btrfs/029
@@ -66,19 +66,14 @@ _scratch_mkfs > /dev/null 2>&1
 _scratch_mount
 $XFS_IO_PROG -f -c 'pwrite -S 0x61 0 9000' $SCRATCH_MNT/original >> 
$seqres.full
 
-_filter_testdirs()
-{
-_filter_test_dir | _filter_scratch
-}
-
 _create_reflinks()
 {
 # auto reflink, should fall back to non-reflink
 rm -rf $2
 echo "reflink=auto:"
 cp --reflink=auto $1 $2
-md5sum $1 | _filter_testdirs
-md5sum $2 | _filter_testdirs
+md5sum $1 | _filter_scratch
+md5sum $2 | _filter_test_dir
 
 # always reflink, should fail outright
 rm -rf $2
@@ -86,7 +81,7 @@ _create_reflinks()
 cp --reflink=always $1 $2 >> $seqres.full 2>&1 || echo "cp reflink failed"
 
 # The failed target actually gets created by cp:
-ls $2 | _filter_testdirs
+ls $2 | _filter_test_dir
 }
 
 echo "test reflinks across different devices"
-- 
2.9.5

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


Re: [PATCH] btrfs/029: fix wrong usage of name filter

2017-08-30 Thread Misono, Tomohiro
Sorry, this patch contains leading spaces, I will resend this soon.

On 2017/08/30 11:44, Misono, Tomohiro wrote:
> btrfs/029 uses _filter_testdirs() to filter the name of $TEST_DIR and
> $SCRATCH_MNT directory.
> 
> In this function, it calls both _filter_test_dir and _filter_scratch
> concatenated by pipe. Therefore if $TEST_DIR is a prefix of
> $SCRATCH_MNT, this filter function gives wrong filtered name for
> $SCRATCH_MNT and the test fails.
> 
> Fix this by calling _filter_test_dir and _filter_scratch directly.
> 
> Signed-off-by: Tomohiro Misono 
> ---
>   tests/btrfs/029 | 11 +++
>   1 file changed, 3 insertions(+), 8 deletions(-)
> 
> diff --git a/tests/btrfs/029 b/tests/btrfs/029
> index c390c95..74fded7 100755
> --- a/tests/btrfs/029
> +++ b/tests/btrfs/029
> @@ -66,19 +66,14 @@ _scratch_mkfs > /dev/null 2>&1
>   _scratch_mount
>   $XFS_IO_PROG -f -c 'pwrite -S 0x61 0 9000' $SCRATCH_MNT/original >> 
> $seqres.full
> 
> -_filter_testdirs()
> -{
> -_filter_test_dir | _filter_scratch
> -}
> -
>   _create_reflinks()
>   {
>   # auto reflink, should fall back to non-reflink
>   rm -rf $2
>   echo "reflink=auto:"
>   cp --reflink=auto $1 $2
> -md5sum $1 | _filter_testdirs
> -md5sum $2 | _filter_testdirs
> +md5sum $1 | _filter_scratch
> +md5sum $2 | _filter_test_dir
> 
>   # always reflink, should fail outright
>   rm -rf $2
> @@ -86,7 +81,7 @@ _create_reflinks()
>   cp --reflink=always $1 $2 >> $seqres.full 2>&1 || echo "cp reflink 
> failed"
> 
>   # The failed target actually gets created by cp:
> -ls $2 | _filter_testdirs
> +ls $2 | _filter_test_dir
>   }
> 
>   echo "test reflinks across different devices"
> 

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


[PATCH] btrfs/029: fix wrong usage of name filter

2017-08-29 Thread Misono, Tomohiro

btrfs/029 uses _filter_testdirs() to filter the name of $TEST_DIR and
$SCRATCH_MNT directory.

In this function, it calls both _filter_test_dir and _filter_scratch
concatenated by pipe. Therefore if $TEST_DIR is a prefix of
$SCRATCH_MNT, this filter function gives wrong filtered name for
$SCRATCH_MNT and the test fails.

Fix this by calling _filter_test_dir and _filter_scratch directly.

Signed-off-by: Tomohiro Misono 
---
 tests/btrfs/029 | 11 +++
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/tests/btrfs/029 b/tests/btrfs/029
index c390c95..74fded7 100755
--- a/tests/btrfs/029
+++ b/tests/btrfs/029
@@ -66,19 +66,14 @@ _scratch_mkfs > /dev/null 2>&1
 _scratch_mount
 $XFS_IO_PROG -f -c 'pwrite -S 0x61 0 9000' $SCRATCH_MNT/original >> 
$seqres.full


-_filter_testdirs()
-{
-_filter_test_dir | _filter_scratch
-}
-
 _create_reflinks()
 {
 # auto reflink, should fall back to non-reflink
 rm -rf $2
 echo "reflink=auto:"
 cp --reflink=auto $1 $2
-md5sum $1 | _filter_testdirs
-md5sum $2 | _filter_testdirs
+md5sum $1 | _filter_scratch
+md5sum $2 | _filter_test_dir

 # always reflink, should fail outright
 rm -rf $2
@@ -86,7 +81,7 @@ _create_reflinks()
 cp --reflink=always $1 $2 >> $seqres.full 2>&1 || echo "cp reflink 
failed"


 # The failed target actually gets created by cp:
-ls $2 | _filter_testdirs
+ls $2 | _filter_test_dir
 }

 echo "test reflinks across different devices"
--
2.9.5

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