From ea1962cc9eaaf732652867e62c6f21b0d7ece5bf Mon Sep 17 00:00:00 2001 From: Qu Wenruo Date: Thu, 26 Aug 2021 13:34:32 +0800 Subject: [PATCH] btrfs: make sure btrfs can create compressed inline extent 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 make sure that the content of the small file is consistent between cycle mount, then use "btrfs inspect dump-tree" to verify the created extent is both inlined and compressed. The regression is fixed by commit 4e9655763b82 ("Revert "btrfs: compression: don't try to compress if we don't have enough pages"") Signed-off-by: Qu Wenruo Reviewed-by: Eryu Guan Signed-off-by: Eryu Guan --- tests/btrfs/246 | 49 +++++++++++++++++++++++++++++++++++++++++++++ tests/btrfs/246.out | 5 +++++ 2 files changed, 54 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..0dcc7c0d --- /dev/null +++ b/tests/btrfs/246 @@ -0,0 +1,49 @@ +#! /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 + +# real QA test starts here +_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=$(stat -c %i $SCRATCH_MNT/foobar) +echo "sha256sum before mount cycle" +sha256sum $SCRATCH_MNT/foobar | _filter_scratch +_scratch_cycle_mount +echo "sha256sum after mount cycle" +sha256sum $SCRATCH_MNT/foobar | _filter_scratch +_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" + +# success, all done +status=0 +exit diff --git a/tests/btrfs/246.out b/tests/btrfs/246.out new file mode 100644 index 00000000..3908cc50 --- /dev/null +++ b/tests/btrfs/246.out @@ -0,0 +1,5 @@ +QA output created by 246 +sha256sum before mount cycle +0ca3bfdeda1ef5036bfa5dad078a9f15724e79cf296bd4388cf786bfaf4195d0 SCRATCH_MNT/foobar +sha256sum after mount cycle +0ca3bfdeda1ef5036bfa5dad078a9f15724e79cf296bd4388cf786bfaf4195d0 SCRATCH_MNT/foobar -- 2.39.5