* [PATCH 0/3] fstests: btrfs/022 fixes
@ 2020-02-07 1:59 Qu Wenruo
2020-02-07 1:59 ` [PATCH 1/3] fstests: btrfs: Use word mathcing for _btrfs_get_subvolid() Qu Wenruo
` (2 more replies)
0 siblings, 3 replies; 13+ messages in thread
From: Qu Wenruo @ 2020-02-07 1:59 UTC (permalink / raw)
To: fstests, linux-btrfs
Since now fsstress can create new subvolumes, it causes new problem for
btrfs/022.
First two patches will fix the problem by:
- Enhance _btrfs_get_subvolid()
So it can catch correct subvolid
- Use proper qgroupid for grep
This solves the random failure even after _btrfs_get_subvolid
enhancement.
The last patch will add extra debug output for btrfs/022 to make our
lives easier.
Qu Wenruo (3):
fstests: btrfs: Use word mathcing for _btrfs_get_subvolid()
fstests: btrfs/022: Match qgroup id more correctly
fstests: btrfs/022: Add debug output
common/btrfs | 2 +-
tests/btrfs/022 | 19 +++++++++++++------
2 files changed, 14 insertions(+), 7 deletions(-)
--
2.23.0
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 1/3] fstests: btrfs: Use word mathcing for _btrfs_get_subvolid()
2020-02-07 1:59 [PATCH 0/3] fstests: btrfs/022 fixes Qu Wenruo
@ 2020-02-07 1:59 ` Qu Wenruo
2020-02-07 2:09 ` Josef Bacik
2020-02-07 9:41 ` Nikolay Borisov
2020-02-07 1:59 ` [PATCH 2/3] fstests: btrfs/022: Match qgroup id more correctly Qu Wenruo
2020-02-07 1:59 ` [PATCH 3/3] fstests: btrfs/022: Add debug output Qu Wenruo
2 siblings, 2 replies; 13+ messages in thread
From: Qu Wenruo @ 2020-02-07 1:59 UTC (permalink / raw)
To: fstests, linux-btrfs; +Cc: Josef Bacik
Current _btrfs_get_subvolid() can't handle the following case at all:
# btrfs subvol list $SCRATCH_MNT
ID 256 gen 9 top level 5 path subv1
ID 257 gen 7 top level 256 path subv1/subv2
ID 258 gen 8 top level 256 path subv1/subv3
ID 259 gen 9 top level 256 path subv1/subv4
If we call "_btrfs_get_subvolid $SCRATCH_MNT subv1" we will get a list
of all subvolumes, not the subvolid of subv1.
To address this problem, we go egrep to match $name which starts with a
space, and at the end of a line.
So that all other subvolumes won't hit.
Suggested-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
common/btrfs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/common/btrfs b/common/btrfs
index 19ac7cc4..85b33e4c 100644
--- a/common/btrfs
+++ b/common/btrfs
@@ -7,7 +7,7 @@ _btrfs_get_subvolid()
mnt=$1
name=$2
- $BTRFS_UTIL_PROG sub list $mnt | grep $name | awk '{ print $2 }'
+ $BTRFS_UTIL_PROG sub list $mnt | egrep "\s$name$" | awk '{ print $2 }'
}
# _require_btrfs_command <command> [<subcommand>|<option>]
--
2.23.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 2/3] fstests: btrfs/022: Match qgroup id more correctly
2020-02-07 1:59 [PATCH 0/3] fstests: btrfs/022 fixes Qu Wenruo
2020-02-07 1:59 ` [PATCH 1/3] fstests: btrfs: Use word mathcing for _btrfs_get_subvolid() Qu Wenruo
@ 2020-02-07 1:59 ` Qu Wenruo
2020-02-07 2:10 ` Josef Bacik
2020-02-07 9:46 ` Nikolay Borisov
2020-02-07 1:59 ` [PATCH 3/3] fstests: btrfs/022: Add debug output Qu Wenruo
2 siblings, 2 replies; 13+ messages in thread
From: Qu Wenruo @ 2020-02-07 1:59 UTC (permalink / raw)
To: fstests, linux-btrfs; +Cc: Josef Bacik
[BUG]
Btrfs/022 sometimes fails with snapshot's reference mismatch with its
source.
[CAUSE]
Since commit fd0830929573 ("fsstress: add the ability to create
snapshots") adds the ability for fsstress to create/delete snapshot and
subvolumes, fsstress will create new subvolumes under test dir.
For example, we could have the following subvolumes created by fsstress:
subvol a id=256
subvol b id=306
qgroupid rfer excl
-------- ---- ----
0/5 16384 16384
0/256 13914112 16384
...
0/263 3080192 2306048 << 2 *306* 048
...
0/306 13914112 16384 << 0/ *306
So when we're greping for subvolid 306, it matches qgroup 0/263 first,
which has difference size, and caused false alert.
[FIX]
Instead of greping "$subvolid" blindly, now grep "0/$subvolid" to catch
qgroupid correctly, without hitting rfer/excl values.
Suggested-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
tests/btrfs/022 | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/tests/btrfs/022 b/tests/btrfs/022
index 5348d3ed..3e729852 100755
--- a/tests/btrfs/022
+++ b/tests/btrfs/022
@@ -49,10 +49,10 @@ _basic_test()
# the shared values of both the original subvol and snapshot should
# match
- a_shared=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep $subvolid)
+ a_shared=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
a_shared=$(echo $a_shared | awk '{ print $2 }')
subvolid=$(_btrfs_get_subvolid $SCRATCH_MNT b)
- b_shared=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep $subvolid)
+ b_shared=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
b_shared=$(echo $b_shared | awk '{ print $2 }')
[ $b_shared -eq $a_shared ] || _fail "shared values don't match"
}
@@ -68,12 +68,12 @@ _rescan_test()
run_check $FSSTRESS_PROG -d $SCRATCH_MNT/a -w -p 1 -n 2000 \
$FSSTRESS_AVOID
sync
- output=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep $subvolid)
+ output=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
echo $output >> $seqres.full
refer=$(echo $output | awk '{ print $2 }')
excl=$(echo $output | awk '{ print $3 }')
_run_btrfs_util_prog quota rescan -w $SCRATCH_MNT
- output=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep $subvolid)
+ output=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
echo $output >> $seqres.full
[ $refer -eq $(echo $output | awk '{ print $2 }') ] || \
_fail "reference values don't match after rescan"
--
2.23.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 3/3] fstests: btrfs/022: Add debug output
2020-02-07 1:59 [PATCH 0/3] fstests: btrfs/022 fixes Qu Wenruo
2020-02-07 1:59 ` [PATCH 1/3] fstests: btrfs: Use word mathcing for _btrfs_get_subvolid() Qu Wenruo
2020-02-07 1:59 ` [PATCH 2/3] fstests: btrfs/022: Match qgroup id more correctly Qu Wenruo
@ 2020-02-07 1:59 ` Qu Wenruo
2020-02-07 2:10 ` Josef Bacik
2020-02-07 9:48 ` Nikolay Borisov
2 siblings, 2 replies; 13+ messages in thread
From: Qu Wenruo @ 2020-02-07 1:59 UTC (permalink / raw)
To: fstests, linux-btrfs
When btrfs/022 fails, its $seqres.full doesn't contain much useful info
to debug.
This patch will add extra debug, including subvolid and full "btrfs
qgroup show" output.
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
tests/btrfs/022 | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/tests/btrfs/022 b/tests/btrfs/022
index 3e729852..aaa27aaa 100755
--- a/tests/btrfs/022
+++ b/tests/btrfs/022
@@ -35,6 +35,7 @@ rm -f $seqres.full
# Test to make sure we can actually turn it on and it makes sense
_basic_test()
{
+ echo "=== basic test ===" >> $seqres.full
_run_btrfs_util_prog subvolume create $SCRATCH_MNT/a
_run_btrfs_util_prog quota enable $SCRATCH_MNT/a
_run_btrfs_util_prog quota rescan -w $SCRATCH_MNT
@@ -51,9 +52,12 @@ _basic_test()
# match
a_shared=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
a_shared=$(echo $a_shared | awk '{ print $2 }')
+ echo "subvol a id=$subvolid" >> $seqres.full
subvolid=$(_btrfs_get_subvolid $SCRATCH_MNT b)
+ echo "subvol b id=$subvolid" >> $seqres.full
b_shared=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
b_shared=$(echo $b_shared | awk '{ print $2 }')
+ $BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT >> $seqres.full
[ $b_shared -eq $a_shared ] || _fail "shared values don't match"
}
@@ -61,6 +65,7 @@ _basic_test()
#come up with the same answer
_rescan_test()
{
+ echo "=== rescan test ===" >> $seqres.full
# first with a blank subvol
_run_btrfs_util_prog subvolume create $SCRATCH_MNT/a
_run_btrfs_util_prog quota enable $SCRATCH_MNT/a
@@ -69,12 +74,12 @@ _rescan_test()
$FSSTRESS_AVOID
sync
output=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
- echo $output >> $seqres.full
+ echo "qgroup values before rescan: $output" >> $seqres.full
refer=$(echo $output | awk '{ print $2 }')
excl=$(echo $output | awk '{ print $3 }')
_run_btrfs_util_prog quota rescan -w $SCRATCH_MNT
output=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
- echo $output >> $seqres.full
+ echo "qgroup values after rescan: $output" >> $seqres.full
[ $refer -eq $(echo $output | awk '{ print $2 }') ] || \
_fail "reference values don't match after rescan"
[ $excl -eq $(echo $output | awk '{ print $3 }') ] || \
@@ -84,6 +89,7 @@ _rescan_test()
#basic exceed limit testing
_limit_test_exceed()
{
+ echo "=== limit exceed test ===" >> $seqres.full
_run_btrfs_util_prog subvolume create $SCRATCH_MNT/a
_run_btrfs_util_prog quota enable $SCRATCH_MNT
subvolid=$(_btrfs_get_subvolid $SCRATCH_MNT a)
@@ -95,6 +101,7 @@ _limit_test_exceed()
#basic noexceed limit testing
_limit_test_noexceed()
{
+ echo "=== limit not exceed test ===" >> $seqres.full
_run_btrfs_util_prog subvolume create $SCRATCH_MNT/a
_run_btrfs_util_prog quota enable $SCRATCH_MNT
subvolid=$(_btrfs_get_subvolid $SCRATCH_MNT a)
--
2.23.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 1/3] fstests: btrfs: Use word mathcing for _btrfs_get_subvolid()
2020-02-07 1:59 ` [PATCH 1/3] fstests: btrfs: Use word mathcing for _btrfs_get_subvolid() Qu Wenruo
@ 2020-02-07 2:09 ` Josef Bacik
2020-02-07 9:41 ` Nikolay Borisov
1 sibling, 0 replies; 13+ messages in thread
From: Josef Bacik @ 2020-02-07 2:09 UTC (permalink / raw)
To: Qu Wenruo, fstests, linux-btrfs
On 2/6/20 8:59 PM, Qu Wenruo wrote:
> Current _btrfs_get_subvolid() can't handle the following case at all:
> # btrfs subvol list $SCRATCH_MNT
> ID 256 gen 9 top level 5 path subv1
> ID 257 gen 7 top level 256 path subv1/subv2
> ID 258 gen 8 top level 256 path subv1/subv3
> ID 259 gen 9 top level 256 path subv1/subv4
>
> If we call "_btrfs_get_subvolid $SCRATCH_MNT subv1" we will get a list
> of all subvolumes, not the subvolid of subv1.
>
> To address this problem, we go egrep to match $name which starts with a
> space, and at the end of a line.
> So that all other subvolumes won't hit.
>
> Suggested-by: Josef Bacik <josef@toxicpanda.com>
> Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Thanks,
Josef
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 2/3] fstests: btrfs/022: Match qgroup id more correctly
2020-02-07 1:59 ` [PATCH 2/3] fstests: btrfs/022: Match qgroup id more correctly Qu Wenruo
@ 2020-02-07 2:10 ` Josef Bacik
2020-02-07 9:46 ` Nikolay Borisov
1 sibling, 0 replies; 13+ messages in thread
From: Josef Bacik @ 2020-02-07 2:10 UTC (permalink / raw)
To: Qu Wenruo, fstests, linux-btrfs
On 2/6/20 8:59 PM, Qu Wenruo wrote:
> [BUG]
> Btrfs/022 sometimes fails with snapshot's reference mismatch with its
> source.
>
> [CAUSE]
> Since commit fd0830929573 ("fsstress: add the ability to create
> snapshots") adds the ability for fsstress to create/delete snapshot and
> subvolumes, fsstress will create new subvolumes under test dir.
>
> For example, we could have the following subvolumes created by fsstress:
> subvol a id=256
> subvol b id=306
> qgroupid rfer excl
> -------- ---- ----
> 0/5 16384 16384
> 0/256 13914112 16384
> ...
> 0/263 3080192 2306048 << 2 *306* 048
> ...
> 0/306 13914112 16384 << 0/ *306
>
> So when we're greping for subvolid 306, it matches qgroup 0/263 first,
> which has difference size, and caused false alert.
>
> [FIX]
> Instead of greping "$subvolid" blindly, now grep "0/$subvolid" to catch
> qgroupid correctly, without hitting rfer/excl values.
>
> Suggested-by: Josef Bacik <josef@toxicpanda.com>
> Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Thanks,
Josef
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 3/3] fstests: btrfs/022: Add debug output
2020-02-07 1:59 ` [PATCH 3/3] fstests: btrfs/022: Add debug output Qu Wenruo
@ 2020-02-07 2:10 ` Josef Bacik
2020-02-07 9:48 ` Nikolay Borisov
1 sibling, 0 replies; 13+ messages in thread
From: Josef Bacik @ 2020-02-07 2:10 UTC (permalink / raw)
To: Qu Wenruo, fstests, linux-btrfs
On 2/6/20 8:59 PM, Qu Wenruo wrote:
> When btrfs/022 fails, its $seqres.full doesn't contain much useful info
> to debug.
>
> This patch will add extra debug, including subvolid and full "btrfs
> qgroup show" output.
>
> Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Thanks,
Josef
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/3] fstests: btrfs: Use word mathcing for _btrfs_get_subvolid()
2020-02-07 1:59 ` [PATCH 1/3] fstests: btrfs: Use word mathcing for _btrfs_get_subvolid() Qu Wenruo
2020-02-07 2:09 ` Josef Bacik
@ 2020-02-07 9:41 ` Nikolay Borisov
2020-02-07 10:02 ` Qu Wenruo
1 sibling, 1 reply; 13+ messages in thread
From: Nikolay Borisov @ 2020-02-07 9:41 UTC (permalink / raw)
To: Qu Wenruo, fstests, linux-btrfs; +Cc: Josef Bacik
On 7.02.20 г. 3:59 ч., Qu Wenruo wrote:
> Current _btrfs_get_subvolid() can't handle the following case at all:
> # btrfs subvol list $SCRATCH_MNT
> ID 256 gen 9 top level 5 path subv1
> ID 257 gen 7 top level 256 path subv1/subv2
> ID 258 gen 8 top level 256 path subv1/subv3
> ID 259 gen 9 top level 256 path subv1/subv4
>
> If we call "_btrfs_get_subvolid $SCRATCH_MNT subv1" we will get a list
> of all subvolumes, not the subvolid of subv1.
>
> To address this problem, we go egrep to match $name which starts with a
> space, and at the end of a line.
> So that all other subvolumes won't hit.
>
> Suggested-by: Josef Bacik <josef@toxicpanda.com>
> Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: Nikolay Borisov <nborisov@suse.com>
> ---
> common/btrfs | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/common/btrfs b/common/btrfs
> index 19ac7cc4..85b33e4c 100644
> --- a/common/btrfs
> +++ b/common/btrfs
> @@ -7,7 +7,7 @@ _btrfs_get_subvolid()
> mnt=$1
> name=$2
>
> - $BTRFS_UTIL_PROG sub list $mnt | grep $name | awk '{ print $2 }'
> + $BTRFS_UTIL_PROG sub list $mnt | egrep "\s$name$" | awk '{ print $2 }'
nit: But you don't even need egrep for this, you could have simply used
"grep $name$"
> }
>
> # _require_btrfs_command <command> [<subcommand>|<option>]
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 2/3] fstests: btrfs/022: Match qgroup id more correctly
2020-02-07 1:59 ` [PATCH 2/3] fstests: btrfs/022: Match qgroup id more correctly Qu Wenruo
2020-02-07 2:10 ` Josef Bacik
@ 2020-02-07 9:46 ` Nikolay Borisov
2020-02-07 10:03 ` Qu Wenruo
1 sibling, 1 reply; 13+ messages in thread
From: Nikolay Borisov @ 2020-02-07 9:46 UTC (permalink / raw)
To: Qu Wenruo, fstests, linux-btrfs; +Cc: Josef Bacik
On 7.02.20 г. 3:59 ч., Qu Wenruo wrote:
> [BUG]
> Btrfs/022 sometimes fails with snapshot's reference mismatch with its
> source.
>
> [CAUSE]
> Since commit fd0830929573 ("fsstress: add the ability to create
> snapshots") adds the ability for fsstress to create/delete snapshot and
> subvolumes, fsstress will create new subvolumes under test dir.
>
> For example, we could have the following subvolumes created by fsstress:
> subvol a id=256
> subvol b id=306
> qgroupid rfer excl
> -------- ---- ----
> 0/5 16384 16384
> 0/256 13914112 16384
> ...
> 0/263 3080192 2306048 << 2 *306* 048
> ...
> 0/306 13914112 16384 << 0/ *306
>
> So when we're greping for subvolid 306, it matches qgroup 0/263 first,
> which has difference size, and caused false alert.
>
> [FIX]
> Instead of greping "$subvolid" blindly, now grep "0/$subvolid" to catch
> qgroupid correctly, without hitting rfer/excl values.
That 0/ can it ever be a number different than 0, if so a more correct
regular expression should be:
grep "[[:digit:]]/306" ?
>
> Suggested-by: Josef Bacik <josef@toxicpanda.com>
> Signed-off-by: Qu Wenruo <wqu@suse.com>
> ---
> tests/btrfs/022 | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/tests/btrfs/022 b/tests/btrfs/022
> index 5348d3ed..3e729852 100755
> --- a/tests/btrfs/022
> +++ b/tests/btrfs/022
> @@ -49,10 +49,10 @@ _basic_test()
>
> # the shared values of both the original subvol and snapshot should
> # match
> - a_shared=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep $subvolid)
> + a_shared=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
> a_shared=$(echo $a_shared | awk '{ print $2 }')
> subvolid=$(_btrfs_get_subvolid $SCRATCH_MNT b)
> - b_shared=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep $subvolid)
> + b_shared=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
> b_shared=$(echo $b_shared | awk '{ print $2 }')
> [ $b_shared -eq $a_shared ] || _fail "shared values don't match"
> }
> @@ -68,12 +68,12 @@ _rescan_test()
> run_check $FSSTRESS_PROG -d $SCRATCH_MNT/a -w -p 1 -n 2000 \
> $FSSTRESS_AVOID
> sync
> - output=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep $subvolid)
> + output=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
> echo $output >> $seqres.full
> refer=$(echo $output | awk '{ print $2 }')
> excl=$(echo $output | awk '{ print $3 }')
> _run_btrfs_util_prog quota rescan -w $SCRATCH_MNT
> - output=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep $subvolid)
> + output=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
> echo $output >> $seqres.full
> [ $refer -eq $(echo $output | awk '{ print $2 }') ] || \
> _fail "reference values don't match after rescan"
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 3/3] fstests: btrfs/022: Add debug output
2020-02-07 1:59 ` [PATCH 3/3] fstests: btrfs/022: Add debug output Qu Wenruo
2020-02-07 2:10 ` Josef Bacik
@ 2020-02-07 9:48 ` Nikolay Borisov
1 sibling, 0 replies; 13+ messages in thread
From: Nikolay Borisov @ 2020-02-07 9:48 UTC (permalink / raw)
To: Qu Wenruo, fstests, linux-btrfs
On 7.02.20 г. 3:59 ч., Qu Wenruo wrote:
> When btrfs/022 fails, its $seqres.full doesn't contain much useful info
> to debug.
>
> This patch will add extra debug, including subvolid and full "btrfs
> qgroup show" output.
>
> Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: Nikolay Borisov <nborisov@suse.com>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/3] fstests: btrfs: Use word mathcing for _btrfs_get_subvolid()
2020-02-07 9:41 ` Nikolay Borisov
@ 2020-02-07 10:02 ` Qu Wenruo
2020-02-07 11:07 ` Nikolay Borisov
0 siblings, 1 reply; 13+ messages in thread
From: Qu Wenruo @ 2020-02-07 10:02 UTC (permalink / raw)
To: Nikolay Borisov, fstests, linux-btrfs; +Cc: Josef Bacik
On 2020/2/7 下午5:41, Nikolay Borisov wrote:
>
>
> On 7.02.20 г. 3:59 ч., Qu Wenruo wrote:
>> Current _btrfs_get_subvolid() can't handle the following case at all:
>> # btrfs subvol list $SCRATCH_MNT
>> ID 256 gen 9 top level 5 path subv1
>> ID 257 gen 7 top level 256 path subv1/subv2
>> ID 258 gen 8 top level 256 path subv1/subv3
>> ID 259 gen 9 top level 256 path subv1/subv4
>>
>> If we call "_btrfs_get_subvolid $SCRATCH_MNT subv1" we will get a list
>> of all subvolumes, not the subvolid of subv1.
>>
>> To address this problem, we go egrep to match $name which starts with a
>> space, and at the end of a line.
>> So that all other subvolumes won't hit.
>>
>> Suggested-by: Josef Bacik <josef@toxicpanda.com>
>> Signed-off-by: Qu Wenruo <wqu@suse.com>
>
> Reviewed-by: Nikolay Borisov <nborisov@suse.com>
>
>> ---
>> common/btrfs | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/common/btrfs b/common/btrfs
>> index 19ac7cc4..85b33e4c 100644
>> --- a/common/btrfs
>> +++ b/common/btrfs
>> @@ -7,7 +7,7 @@ _btrfs_get_subvolid()
>> mnt=$1
>> name=$2
>>
>> - $BTRFS_UTIL_PROG sub list $mnt | grep $name | awk '{ print $2 }'
>> + $BTRFS_UTIL_PROG sub list $mnt | egrep "\s$name$" | awk '{ print $2 }'
>
> nit: But you don't even need egrep for this, you could have simply used
> "grep $name$"
That \s is needed. Or the following case can't be handled:
ID 256 gen 9 top level 5 path subv1
ID 257 gen 7 top level 256 path subv1/subv1
Thanks,
Qu
>
>> }
>>
>> # _require_btrfs_command <command> [<subcommand>|<option>]
>>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 2/3] fstests: btrfs/022: Match qgroup id more correctly
2020-02-07 9:46 ` Nikolay Borisov
@ 2020-02-07 10:03 ` Qu Wenruo
0 siblings, 0 replies; 13+ messages in thread
From: Qu Wenruo @ 2020-02-07 10:03 UTC (permalink / raw)
To: Nikolay Borisov, fstests, linux-btrfs; +Cc: Josef Bacik
On 2020/2/7 下午5:46, Nikolay Borisov wrote:
>
>
> On 7.02.20 г. 3:59 ч., Qu Wenruo wrote:
>> [BUG]
>> Btrfs/022 sometimes fails with snapshot's reference mismatch with its
>> source.
>>
>> [CAUSE]
>> Since commit fd0830929573 ("fsstress: add the ability to create
>> snapshots") adds the ability for fsstress to create/delete snapshot and
>> subvolumes, fsstress will create new subvolumes under test dir.
>>
>> For example, we could have the following subvolumes created by fsstress:
>> subvol a id=256
>> subvol b id=306
>> qgroupid rfer excl
>> -------- ---- ----
>> 0/5 16384 16384
>> 0/256 13914112 16384
>> ...
>> 0/263 3080192 2306048 << 2 *306* 048
>> ...
>> 0/306 13914112 16384 << 0/ *306
>>
>> So when we're greping for subvolid 306, it matches qgroup 0/263 first,
>> which has difference size, and caused false alert.
>>
>> [FIX]
>> Instead of greping "$subvolid" blindly, now grep "0/$subvolid" to catch
>> qgroupid correctly, without hitting rfer/excl values.
>
> That 0/ can it ever be a number different than 0, if so a more correct
> regular expression should be:
> grep "[[:digit:]]/306" ?
In this particular case, we only care level 0 qgroup, thus it's enough.
If we're extracting it into a generic wrapper, then your
[[:digit:]]/$subvolid will be needed.
Thanks,
Qu
>
>
>>
>> Suggested-by: Josef Bacik <josef@toxicpanda.com>
>> Signed-off-by: Qu Wenruo <wqu@suse.com>
>> ---
>> tests/btrfs/022 | 8 ++++----
>> 1 file changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/tests/btrfs/022 b/tests/btrfs/022
>> index 5348d3ed..3e729852 100755
>> --- a/tests/btrfs/022
>> +++ b/tests/btrfs/022
>> @@ -49,10 +49,10 @@ _basic_test()
>>
>> # the shared values of both the original subvol and snapshot should
>> # match
>> - a_shared=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep $subvolid)
>> + a_shared=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
>> a_shared=$(echo $a_shared | awk '{ print $2 }')
>> subvolid=$(_btrfs_get_subvolid $SCRATCH_MNT b)
>> - b_shared=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep $subvolid)
>> + b_shared=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
>> b_shared=$(echo $b_shared | awk '{ print $2 }')
>> [ $b_shared -eq $a_shared ] || _fail "shared values don't match"
>> }
>> @@ -68,12 +68,12 @@ _rescan_test()
>> run_check $FSSTRESS_PROG -d $SCRATCH_MNT/a -w -p 1 -n 2000 \
>> $FSSTRESS_AVOID
>> sync
>> - output=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep $subvolid)
>> + output=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
>> echo $output >> $seqres.full
>> refer=$(echo $output | awk '{ print $2 }')
>> excl=$(echo $output | awk '{ print $3 }')
>> _run_btrfs_util_prog quota rescan -w $SCRATCH_MNT
>> - output=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep $subvolid)
>> + output=$($BTRFS_UTIL_PROG qgroup show $units $SCRATCH_MNT | grep "0/$subvolid")
>> echo $output >> $seqres.full
>> [ $refer -eq $(echo $output | awk '{ print $2 }') ] || \
>> _fail "reference values don't match after rescan"
>>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/3] fstests: btrfs: Use word mathcing for _btrfs_get_subvolid()
2020-02-07 10:02 ` Qu Wenruo
@ 2020-02-07 11:07 ` Nikolay Borisov
0 siblings, 0 replies; 13+ messages in thread
From: Nikolay Borisov @ 2020-02-07 11:07 UTC (permalink / raw)
To: Qu Wenruo, fstests, linux-btrfs; +Cc: Josef Bacik
On 7.02.20 г. 12:02 ч., Qu Wenruo wrote:
>
>
> On 2020/2/7 下午5:41, Nikolay Borisov wrote:
>>
>>
>> On 7.02.20 г. 3:59 ч., Qu Wenruo wrote:
>>> Current _btrfs_get_subvolid() can't handle the following case at all:
>>> # btrfs subvol list $SCRATCH_MNT
>>> ID 256 gen 9 top level 5 path subv1
>>> ID 257 gen 7 top level 256 path subv1/subv2
>>> ID 258 gen 8 top level 256 path subv1/subv3
>>> ID 259 gen 9 top level 256 path subv1/subv4
>>>
>>> If we call "_btrfs_get_subvolid $SCRATCH_MNT subv1" we will get a list
>>> of all subvolumes, not the subvolid of subv1.
>>>
>>> To address this problem, we go egrep to match $name which starts with a
>>> space, and at the end of a line.
>>> So that all other subvolumes won't hit.
>>>
>>> Suggested-by: Josef Bacik <josef@toxicpanda.com>
>>> Signed-off-by: Qu Wenruo <wqu@suse.com>
>>
>> Reviewed-by: Nikolay Borisov <nborisov@suse.com>
>>
>>> ---
>>> common/btrfs | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/common/btrfs b/common/btrfs
>>> index 19ac7cc4..85b33e4c 100644
>>> --- a/common/btrfs
>>> +++ b/common/btrfs
>>> @@ -7,7 +7,7 @@ _btrfs_get_subvolid()
>>> mnt=$1
>>> name=$2
>>>
>>> - $BTRFS_UTIL_PROG sub list $mnt | grep $name | awk '{ print $2 }'
>>> + $BTRFS_UTIL_PROG sub list $mnt | egrep "\s$name$" | awk '{ print $2 }'
>>
>> nit: But you don't even need egrep for this, you could have simply used
>> "grep $name$"
>
> That \s is needed. Or the following case can't be handled:
>
> ID 256 gen 9 top level 5 path subv1
> ID 257 gen 7 top level 256 path subv1/subv1
Good point.
>
> Thanks,
> Qu
>
>>
>>> }
>>>
>>> # _require_btrfs_command <command> [<subcommand>|<option>]
>>>
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2020-02-07 11:07 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-07 1:59 [PATCH 0/3] fstests: btrfs/022 fixes Qu Wenruo
2020-02-07 1:59 ` [PATCH 1/3] fstests: btrfs: Use word mathcing for _btrfs_get_subvolid() Qu Wenruo
2020-02-07 2:09 ` Josef Bacik
2020-02-07 9:41 ` Nikolay Borisov
2020-02-07 10:02 ` Qu Wenruo
2020-02-07 11:07 ` Nikolay Borisov
2020-02-07 1:59 ` [PATCH 2/3] fstests: btrfs/022: Match qgroup id more correctly Qu Wenruo
2020-02-07 2:10 ` Josef Bacik
2020-02-07 9:46 ` Nikolay Borisov
2020-02-07 10:03 ` Qu Wenruo
2020-02-07 1:59 ` [PATCH 3/3] fstests: btrfs/022: Add debug output Qu Wenruo
2020-02-07 2:10 ` Josef Bacik
2020-02-07 9:48 ` Nikolay Borisov
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.