* [PATCH 1/3] btrfs-progs: tests: Move extract_image out of check_all_images for common use
@ 2015-09-04 13:23 Zhao Lei
2015-09-04 13:23 ` [PATCH 2/3] btrfs-progs: tests: Introduce fsck-tests/018-leaf-accross-stripes Zhao Lei
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Zhao Lei @ 2015-09-04 13:23 UTC (permalink / raw)
To: linux-btrfs; +Cc: Zhao Lei
Move code for extract image file to a function from check_all_images()
for common use, so caller can use this function to extrace single
image file.
Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com>
---
tests/common | 73 ++++++++++++++++++++++++++++++++++--------------------------
1 file changed, 41 insertions(+), 32 deletions(-)
diff --git a/tests/common b/tests/common
index 63b0d9f..0c0efef 100644
--- a/tests/common
+++ b/tests/common
@@ -62,6 +62,44 @@ check_image()
run_check $TOP/btrfs check $image
}
+extract_image()
+{
+ local image="$1"
+
+ local cleanme=
+ case "$image" in
+ *.img)
+ rm -f $image.restored
+ : ;;
+ *.img.xz)
+ xz --decompress --keep "$image" || \
+ _fail "failed to decompress image $image"
+ image=${image%%.xz}
+ rm -f $image.restored
+ cleanme=$image
+ ;;
+ *.raw)
+ cp --sparse=auto $image $image.restored
+ ;;
+ *.raw.xz)
+ xz --decompress --keep "$image" || \
+ _fail "failed to decompress image $image"
+ image=${image%%.xz}
+ mv "$image" "$image".restored
+ ;;
+ esac
+
+ if ! [ -f $image.restored ]; then
+ echo "restoring image $(basename $image)" >> $RESULTS
+ $TOP/btrfs-image -r $image $image.restored || \
+ _fail "failed to restore image $image"
+ fi
+
+ [[ "$cleanme" ]] && rm -f "$cleanme"
+
+ EXTRACT_IMAGE_OUTPUT="$image.restored"
+}
+
# Process all image dumps in a given directory,
# - raw btrfs filesystem images, suffix .raw
# - dtto compressed by XZ, suffix .raw.xz
@@ -75,38 +113,9 @@ check_all_images()
-iname '*.raw' -o \
-iname '*.raw.xz' \) | sort)
do
- cleanme=
- case "$image" in
- *.img)
- rm -f $image.restored
- : ;;
- *.img.xz)
- xz --decompress --keep "$image" || \
- _fail "failed to decompress image $image"
- image=${image%%.xz}
- rm -f $image.restored
- cleanme=$image
- ;;
- *.raw)
- cp --sparse=auto $image $image.restored
- ;;
- *.raw.xz)
- xz --decompress --keep "$image" || \
- _fail "failed to decompress image $image"
- image=${image%%.xz}
- mv "$image" "$image".restored
- ;;
- esac
-
- if ! [ -f $image.restored ]; then
- echo "restoring image $(basename $image)" >> $RESULTS
- $TOP/btrfs-image -r $image $image.restored || \
- _fail "failed to restore image $image"
- fi
-
- check_image $image.restored
-
- rm -f $image.restored $cleanme
+ extract_image "$image"
+ check_image "$EXTRACT_IMAGE_OUTPUT"
+ rm -f "$EXTRACT_IMAGE_OUTPUT"
done
}
--
1.8.5.1
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH 2/3] btrfs-progs: tests: Introduce fsck-tests/018-leaf-accross-stripes 2015-09-04 13:23 [PATCH 1/3] btrfs-progs: tests: Move extract_image out of check_all_images for common use Zhao Lei @ 2015-09-04 13:23 ` Zhao Lei 2015-09-04 13:23 ` [PATCH 3/3] btrfs-progs: tests: Introduce misc-tests/008-leaf-accross-stripes Zhao Lei 2015-09-22 7:14 ` [PATCH 1/3] btrfs-progs: tests: Move extract_image out of check_all_images for common use David Sterba 2 siblings, 0 replies; 6+ messages in thread From: Zhao Lei @ 2015-09-04 13:23 UTC (permalink / raw) To: linux-btrfs; +Cc: Zhao Lei To test is fsck can check "leaf accross stripes" case. This function was introduced from patch titled: btrfs-progs: fsck: Check if a metadata tree block crossing stripe boundary Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com> --- .../018-leaf-accross-stripes/default_case.raw.xz | Bin 0 -> 105064 bytes tests/fsck-tests/018-leaf-accross-stripes/test.sh | 12 ++++++++++++ 2 files changed, 12 insertions(+) create mode 100644 tests/fsck-tests/018-leaf-accross-stripes/default_case.raw.xz create mode 100755 tests/fsck-tests/018-leaf-accross-stripes/test.sh diff --git a/tests/fsck-tests/018-leaf-accross-stripes/default_case.raw.xz b/tests/fsck-tests/018-leaf-accross-stripes/default_case.raw.xz new file mode 100644 index 0000000000000000000000000000000000000000..60eb2f978a4c37b000b650ddcb06219eadac9e68 GIT binary patch literal 105064 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 literal 0 HcmV?d00001 diff --git a/tests/fsck-tests/018-leaf-accross-stripes/test.sh b/tests/fsck-tests/018-leaf-accross-stripes/test.sh new file mode 100755 index 0000000..7e7f8c5 --- /dev/null +++ b/tests/fsck-tests/018-leaf-accross-stripes/test.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +source $TOP/tests/common + +check_prereq btrfs + +extract_image "./default_case.raw.xz" +$TOP/btrfs check "$EXTRACT_IMAGE_OUTPUT" 2>&1 | + grep -q "crossing stripe boundary" || + _fail "no expected error message in output" + +rm -f "$EXTRACT_IMAGE_OUTPUT" -- 1.8.5.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/3] btrfs-progs: tests: Introduce misc-tests/008-leaf-accross-stripes 2015-09-04 13:23 [PATCH 1/3] btrfs-progs: tests: Move extract_image out of check_all_images for common use Zhao Lei 2015-09-04 13:23 ` [PATCH 2/3] btrfs-progs: tests: Introduce fsck-tests/018-leaf-accross-stripes Zhao Lei @ 2015-09-04 13:23 ` Zhao Lei 2015-09-09 1:46 ` Qu Wenruo 2015-09-22 7:14 ` [PATCH 1/3] btrfs-progs: tests: Move extract_image out of check_all_images for common use David Sterba 2 siblings, 1 reply; 6+ messages in thread From: Zhao Lei @ 2015-09-04 13:23 UTC (permalink / raw) To: linux-btrfs; +Cc: Zhao Lei To check is btrfs-convert create bad filesystem with leaf accross stripes. It is happened in progs version <=v4.1.2, and fixed by patch titled: btrfs: convert: Avoid allocating metadata extent crossing stripe boundary which was merged in v4.2. Notice thar this testcase can not report error in old version of btrfs-progs, because "btrfs check" can't check this type of error in those version, but we have another testcase in fsck-tests, to check is "btrfs check" support this check. So, use above 2 testcase together can check out leaf-accross-stripes bug in all version. Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com> --- tests/misc-tests/008-leaf-accross-stripes/test.sh | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100755 tests/misc-tests/008-leaf-accross-stripes/test.sh diff --git a/tests/misc-tests/008-leaf-accross-stripes/test.sh b/tests/misc-tests/008-leaf-accross-stripes/test.sh new file mode 100755 index 0000000..4801dce --- /dev/null +++ b/tests/misc-tests/008-leaf-accross-stripes/test.sh @@ -0,0 +1,24 @@ +#!/bin/bash +# test btrfs subvolume run normally with more than one subvolume +# +# - btrfs subvolume must not loop indefinetelly +# - btrfs subvolume return 0 in normal case + +source $TOP/tests/common + +check_prereq btrfs-convert +check_prereq btrfs + +# In my test, it happened in 514M~560M, 737M~769M, 929M~917M, +# and HAVE_ERROR=((size + 1) / 2) % 2 if size >= 970 +# +SIZE_FROM=514 +SIZE_END=560 +A_PRIME_NUM=17 +for ((size = SIZE_FROM; size <= SIZE_END; size += A_PRIME_NUM)); do + run_check truncate -s "$size"M "$IMAGE" + run_check mkfs.ext4 -F "$IMAGE" + run_check $TOP/btrfs-convert "$IMAGE" + $TOP/btrfs check "$IMAGE" 2>&1 | grep "crossing stripe boundary" && + _fail "leaf accross stripes in btrfs-convert" +done -- 1.8.5.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 3/3] btrfs-progs: tests: Introduce misc-tests/008-leaf-accross-stripes 2015-09-04 13:23 ` [PATCH 3/3] btrfs-progs: tests: Introduce misc-tests/008-leaf-accross-stripes Zhao Lei @ 2015-09-09 1:46 ` Qu Wenruo 2015-09-09 9:09 ` Zhao Lei 0 siblings, 1 reply; 6+ messages in thread From: Qu Wenruo @ 2015-09-09 1:46 UTC (permalink / raw) To: Zhao Lei, linux-btrfs Zhao Lei wrote on 2015/09/04 21:23 +0800: > To check is btrfs-convert create bad filesystem with > leaf accross stripes. > > It is happened in progs version <=v4.1.2, and fixed by patch titled: > btrfs: convert: Avoid allocating metadata extent crossing stripe boundary > which was merged in v4.2. > > Notice thar this testcase can not report error in old version of > btrfs-progs, because "btrfs check" can't check this type of error > in those version, but we have another testcase in fsck-tests, to > check is "btrfs check" support this check. > > So, use above 2 testcase together can check out leaf-accross-stripes > bug in all version. > > Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com> > --- > tests/misc-tests/008-leaf-accross-stripes/test.sh | 24 +++++++++++++++++++++++ > 1 file changed, 24 insertions(+) > create mode 100755 tests/misc-tests/008-leaf-accross-stripes/test.sh > > diff --git a/tests/misc-tests/008-leaf-accross-stripes/test.sh b/tests/misc-tests/008-leaf-accross-stripes/test.sh > new file mode 100755 > index 0000000..4801dce > --- /dev/null > +++ b/tests/misc-tests/008-leaf-accross-stripes/test.sh > @@ -0,0 +1,24 @@ > +#!/bin/bash > +# test btrfs subvolume run normally with more than one subvolume > +# > +# - btrfs subvolume must not loop indefinetelly > +# - btrfs subvolume return 0 in normal case > + > +source $TOP/tests/common > + > +check_prereq btrfs-convert > +check_prereq btrfs > + > +# In my test, it happened in 514M~560M, 737M~769M, 929M~917M, > +# and HAVE_ERROR=((size + 1) / 2) % 2 if size >= 970 > +# > +SIZE_FROM=514 > +SIZE_END=560 > +A_PRIME_NUM=17 > +for ((size = SIZE_FROM; size <= SIZE_END; size += A_PRIME_NUM)); do > + run_check truncate -s "$size"M "$IMAGE" > + run_check mkfs.ext4 -F "$IMAGE" > + run_check $TOP/btrfs-convert "$IMAGE" > + $TOP/btrfs check "$IMAGE" 2>&1 | grep "crossing stripe boundary" && > + _fail "leaf accross stripes in btrfs-convert" > +done > Maybe I'm wrong, but even with your script, I still can't reproduce the bug. After some search in git log, I found that, from 4.1 btrfs-convert won't allow mixed block group since the following commit: commit c9b73b702be71bbc1a3a815a745e6e4e57eadffc Author: David Sterba <dsterba@suse.cz> Date: Mon Mar 23 19:31:31 2015 +0100 btrfs-progs: convert: allow to set filesystem features So the new test may not be necessary and won't reproduce the bug. Thanks, Qu ^ permalink raw reply [flat|nested] 6+ messages in thread
* RE: [PATCH 3/3] btrfs-progs: tests: Introduce misc-tests/008-leaf-accross-stripes 2015-09-09 1:46 ` Qu Wenruo @ 2015-09-09 9:09 ` Zhao Lei 0 siblings, 0 replies; 6+ messages in thread From: Zhao Lei @ 2015-09-09 9:09 UTC (permalink / raw) To: 'Qu Wenruo', linux-btrfs Hi, Qu Wenruo > -----Original Message----- > From: Qu Wenruo [mailto:quwenruo@cn.fujitsu.com] > Sent: Wednesday, September 09, 2015 9:46 AM > To: Zhao Lei <zhaolei@cn.fujitsu.com>; linux-btrfs@vger.kernel.org > Subject: Re: [PATCH 3/3] btrfs-progs: tests: Introduce > misc-tests/008-leaf-accross-stripes > > > > Zhao Lei wrote on 2015/09/04 21:23 +0800: > > To check is btrfs-convert create bad filesystem with leaf accross > > stripes. > > > > It is happened in progs version <=v4.1.2, and fixed by patch titled: > > btrfs: convert: Avoid allocating metadata extent crossing stripe > > boundary which was merged in v4.2. > > > > Notice thar this testcase can not report error in old version of > > btrfs-progs, because "btrfs check" can't check this type of error in > > those version, but we have another testcase in fsck-tests, to check is > > "btrfs check" support this check. > > > > So, use above 2 testcase together can check out leaf-accross-stripes > > bug in all version. > > > > Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com> > > --- > > tests/misc-tests/008-leaf-accross-stripes/test.sh | 24 > +++++++++++++++++++++++ > > 1 file changed, 24 insertions(+) > > create mode 100755 tests/misc-tests/008-leaf-accross-stripes/test.sh > > > > diff --git a/tests/misc-tests/008-leaf-accross-stripes/test.sh > > b/tests/misc-tests/008-leaf-accross-stripes/test.sh > > new file mode 100755 > > index 0000000..4801dce > > --- /dev/null > > +++ b/tests/misc-tests/008-leaf-accross-stripes/test.sh > > @@ -0,0 +1,24 @@ > > +#!/bin/bash > > +# test btrfs subvolume run normally with more than one subvolume # # > > +- btrfs subvolume must not loop indefinetelly # - btrfs subvolume > > +return 0 in normal case > > + > > +source $TOP/tests/common > > + > > +check_prereq btrfs-convert > > +check_prereq btrfs > > + > > +# In my test, it happened in 514M~560M, 737M~769M, 929M~917M, # and > > +HAVE_ERROR=((size + 1) / 2) % 2 if size >= 970 # > > +SIZE_FROM=514 > > +SIZE_END=560 > > +A_PRIME_NUM=17 > > +for ((size = SIZE_FROM; size <= SIZE_END; size += A_PRIME_NUM)); do > > + run_check truncate -s "$size"M "$IMAGE" > > + run_check mkfs.ext4 -F "$IMAGE" > > + run_check $TOP/btrfs-convert "$IMAGE" > > + $TOP/btrfs check "$IMAGE" 2>&1 | grep "crossing stripe boundary" && > > + _fail "leaf accross stripes in btrfs-convert" > > +done > > > Maybe I'm wrong, but even with your script, I still can't reproduce the bug. > It is right case. In old version of progs, convert have above bug, but btrfs check can not report. In new version of progs, btrfs check can report the bug, but convert fixed the bug. It is noticed in patch's description. > After some search in git log, I found that, from 4.1 btrfs-convert won't allow > mixed block group since the following commit: > commit c9b73b702be71bbc1a3a815a745e6e4e57eadffc > Author: David Sterba <dsterba@suse.cz> > Date: Mon Mar 23 19:31:31 2015 +0100 > > btrfs-progs: convert: allow to set filesystem features > > So the new test may not be necessary and won't reproduce the bug. > Yes, it is fixed. But we found a bug, we need fix the bug and write a testcase for it simultaneously. Thanks Zhaolei > Thanks, > Qu ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/3] btrfs-progs: tests: Move extract_image out of check_all_images for common use 2015-09-04 13:23 [PATCH 1/3] btrfs-progs: tests: Move extract_image out of check_all_images for common use Zhao Lei 2015-09-04 13:23 ` [PATCH 2/3] btrfs-progs: tests: Introduce fsck-tests/018-leaf-accross-stripes Zhao Lei 2015-09-04 13:23 ` [PATCH 3/3] btrfs-progs: tests: Introduce misc-tests/008-leaf-accross-stripes Zhao Lei @ 2015-09-22 7:14 ` David Sterba 2 siblings, 0 replies; 6+ messages in thread From: David Sterba @ 2015-09-22 7:14 UTC (permalink / raw) To: Zhao Lei; +Cc: linux-btrfs On Fri, Sep 04, 2015 at 09:23:49PM +0800, Zhao Lei wrote: > Move code for extract image file to a function from check_all_images() > for common use, so caller can use this function to extrace single > image file. Moving the code to a wrapper is good but return value via a variable is not. The function is string-to-string, so it can just echo it at the end. ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2015-09-22 7:15 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-09-04 13:23 [PATCH 1/3] btrfs-progs: tests: Move extract_image out of check_all_images for common use Zhao Lei 2015-09-04 13:23 ` [PATCH 2/3] btrfs-progs: tests: Introduce fsck-tests/018-leaf-accross-stripes Zhao Lei 2015-09-04 13:23 ` [PATCH 3/3] btrfs-progs: tests: Introduce misc-tests/008-leaf-accross-stripes Zhao Lei 2015-09-09 1:46 ` Qu Wenruo 2015-09-09 9:09 ` Zhao Lei 2015-09-22 7:14 ` [PATCH 1/3] btrfs-progs: tests: Move extract_image out of check_all_images for common use David Sterba
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.