Message ID | 20210825061923.13770-1-wqu@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | fstests: btrfs/246: add test case to make sure btrfs can create compressed inline extent | expand |
On Wed, Aug 25, 2021 at 7:19 AM Qu Wenruo <wqu@suse.com> wrote: > > Btrfs has the ability to inline small file extents into its metadata, > and such inlined extents can be further compressed if needed. > > The new test case is for a regression caused by commit f2165627319f > ("btrfs: compression: don't try to compress if we don't have enough > pages"). > > That commit prevents btrfs from creating compressed inline extents, even > "-o compress,max_inline=2048" is specified, only uncompressed inline > extents can be created. > > The test case will use "btrfs inspect dump-tree" to verify the created > extent is both inlined and compressed. > > Signed-off-by: Qu Wenruo <wqu@suse.com> > --- > tests/btrfs/246 | 50 +++++++++++++++++++++++++++++++++++++++++++++ > tests/btrfs/246.out | 2 ++ > 2 files changed, 52 insertions(+) > create mode 100755 tests/btrfs/246 > create mode 100644 tests/btrfs/246.out > > diff --git a/tests/btrfs/246 b/tests/btrfs/246 > new file mode 100755 > index 00000000..15bb064d > --- /dev/null > +++ b/tests/btrfs/246 > @@ -0,0 +1,50 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (c) 2021 SUSE Linux Products GmbH. All Rights Reserved. > +# > +# FS QA Test 246 > +# > +# Make sure btrfs can create compressed inline extents > +# > +. ./common/preamble > +_begin_fstest auto quick compress > + > +# Override the default cleanup function. > +_cleanup() > +{ > + cd / > + rm -r -f $tmp.* > +} > + > +# Import common functions. > +. ./common/filter > +# For __populate_find_inode() > +. ./common/populate > + > +# real QA test starts here > + > +# Modify as appropriate. > +_supported_fs btrfs > +_require_scratch > + > +_scratch_mkfs > /dev/null > +_scratch_mount -o compress,max_inline=2048 > + > +# This should create compressed inline extent > +$XFS_IO_PROG -f -c "pwrite 0 2048" $SCRATCH_MNT/foobar > /dev/null > +ino=$(__populate_find_inode $SCRATCH_MNT/foobar) > +_scratch_unmount > + > +$BTRFS_UTIL_PROG inspect dump-tree -t 5 $SCRATCH_DEV | \ > + grep "($ino EXTENT_DATA 0" -A2 > $tmp.dump-tree > +echo "dump tree result for ino $ino:" >> $seqres.full > +cat $tmp.dump-tree >> $seqres.full > + > +grep -q "inline extent" $tmp.dump-tree || echo "no inline extent found" > +grep -q "compression 1" $tmp.dump-tree || echo "no compressed extent found" > + > +echo "Silence is golden" While here, we could also check that we are able to read exactly what we wrote before, after evicting the page (e.g. after a call to _scratch_cycle_mount). Other than that, it looks ok. Thanks. > + > +# success, all done > +status=0 > +exit > diff --git a/tests/btrfs/246.out b/tests/btrfs/246.out > new file mode 100644 > index 00000000..287f7983 > --- /dev/null > +++ b/tests/btrfs/246.out > @@ -0,0 +1,2 @@ > +QA output created by 246 > +Silence is golden > -- > 2.31.1 >
On 2021/8/25 下午10:24, Filipe Manana wrote: > On Wed, Aug 25, 2021 at 7:19 AM Qu Wenruo <wqu@suse.com> wrote: >> >> Btrfs has the ability to inline small file extents into its metadata, >> and such inlined extents can be further compressed if needed. >> >> The new test case is for a regression caused by commit f2165627319f >> ("btrfs: compression: don't try to compress if we don't have enough >> pages"). >> >> That commit prevents btrfs from creating compressed inline extents, even >> "-o compress,max_inline=2048" is specified, only uncompressed inline >> extents can be created. >> >> The test case will use "btrfs inspect dump-tree" to verify the created >> extent is both inlined and compressed. >> >> Signed-off-by: Qu Wenruo <wqu@suse.com> >> --- >> tests/btrfs/246 | 50 +++++++++++++++++++++++++++++++++++++++++++++ >> tests/btrfs/246.out | 2 ++ >> 2 files changed, 52 insertions(+) >> create mode 100755 tests/btrfs/246 >> create mode 100644 tests/btrfs/246.out >> >> diff --git a/tests/btrfs/246 b/tests/btrfs/246 >> new file mode 100755 >> index 00000000..15bb064d >> --- /dev/null >> +++ b/tests/btrfs/246 >> @@ -0,0 +1,50 @@ >> +#! /bin/bash >> +# SPDX-License-Identifier: GPL-2.0 >> +# Copyright (c) 2021 SUSE Linux Products GmbH. All Rights Reserved. >> +# >> +# FS QA Test 246 >> +# >> +# Make sure btrfs can create compressed inline extents >> +# >> +. ./common/preamble >> +_begin_fstest auto quick compress >> + >> +# Override the default cleanup function. >> +_cleanup() >> +{ >> + cd / >> + rm -r -f $tmp.* >> +} >> + >> +# Import common functions. >> +. ./common/filter >> +# For __populate_find_inode() >> +. ./common/populate >> + >> +# real QA test starts here >> + >> +# Modify as appropriate. >> +_supported_fs btrfs >> +_require_scratch >> + >> +_scratch_mkfs > /dev/null >> +_scratch_mount -o compress,max_inline=2048 >> + >> +# This should create compressed inline extent >> +$XFS_IO_PROG -f -c "pwrite 0 2048" $SCRATCH_MNT/foobar > /dev/null >> +ino=$(__populate_find_inode $SCRATCH_MNT/foobar) >> +_scratch_unmount >> + >> +$BTRFS_UTIL_PROG inspect dump-tree -t 5 $SCRATCH_DEV | \ >> + grep "($ino EXTENT_DATA 0" -A2 > $tmp.dump-tree >> +echo "dump tree result for ino $ino:" >> $seqres.full >> +cat $tmp.dump-tree >> $seqres.full >> + >> +grep -q "inline extent" $tmp.dump-tree || echo "no inline extent found" >> +grep -q "compression 1" $tmp.dump-tree || echo "no compressed extent found" >> + >> +echo "Silence is golden" > > While here, we could also check that we are able to read exactly what > we wrote before, after evicting the page (e.g. after a call to > _scratch_cycle_mount). Nice idea. Will update the test case soon. Thanks, Qu > Other than that, it looks ok. > > Thanks. > > >> + >> +# success, all done >> +status=0 >> +exit >> diff --git a/tests/btrfs/246.out b/tests/btrfs/246.out >> new file mode 100644 >> index 00000000..287f7983 >> --- /dev/null >> +++ b/tests/btrfs/246.out >> @@ -0,0 +1,2 @@ >> +QA output created by 246 >> +Silence is golden >> -- >> 2.31.1 >> > >
diff --git a/tests/btrfs/246 b/tests/btrfs/246 new file mode 100755 index 00000000..15bb064d --- /dev/null +++ b/tests/btrfs/246 @@ -0,0 +1,50 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2021 SUSE Linux Products GmbH. All Rights Reserved. +# +# FS QA Test 246 +# +# Make sure btrfs can create compressed inline extents +# +. ./common/preamble +_begin_fstest auto quick compress + +# Override the default cleanup function. +_cleanup() +{ + cd / + rm -r -f $tmp.* +} + +# Import common functions. +. ./common/filter +# For __populate_find_inode() +. ./common/populate + +# real QA test starts here + +# Modify as appropriate. +_supported_fs btrfs +_require_scratch + +_scratch_mkfs > /dev/null +_scratch_mount -o compress,max_inline=2048 + +# This should create compressed inline extent +$XFS_IO_PROG -f -c "pwrite 0 2048" $SCRATCH_MNT/foobar > /dev/null +ino=$(__populate_find_inode $SCRATCH_MNT/foobar) +_scratch_unmount + +$BTRFS_UTIL_PROG inspect dump-tree -t 5 $SCRATCH_DEV | \ + grep "($ino EXTENT_DATA 0" -A2 > $tmp.dump-tree +echo "dump tree result for ino $ino:" >> $seqres.full +cat $tmp.dump-tree >> $seqres.full + +grep -q "inline extent" $tmp.dump-tree || echo "no inline extent found" +grep -q "compression 1" $tmp.dump-tree || echo "no compressed extent found" + +echo "Silence is golden" + +# success, all done +status=0 +exit diff --git a/tests/btrfs/246.out b/tests/btrfs/246.out new file mode 100644 index 00000000..287f7983 --- /dev/null +++ b/tests/btrfs/246.out @@ -0,0 +1,2 @@ +QA output created by 246 +Silence is golden
Btrfs has the ability to inline small file extents into its metadata, and such inlined extents can be further compressed if needed. The new test case is for a regression caused by commit f2165627319f ("btrfs: compression: don't try to compress if we don't have enough pages"). That commit prevents btrfs from creating compressed inline extents, even "-o compress,max_inline=2048" is specified, only uncompressed inline extents can be created. The test case will use "btrfs inspect dump-tree" to verify the created extent is both inlined and compressed. Signed-off-by: Qu Wenruo <wqu@suse.com> --- tests/btrfs/246 | 50 +++++++++++++++++++++++++++++++++++++++++++++ tests/btrfs/246.out | 2 ++ 2 files changed, 52 insertions(+) create mode 100755 tests/btrfs/246 create mode 100644 tests/btrfs/246.out