From: Qu Wenruo <wqu@suse.com>
To: linux-btrfs@vger.kernel.org
Cc: Hanabishi <i.r.e.c.c.a.k.u.n+kernel.org@gmail.com>
Subject: [PATCH v2 2/2] btrfs: remove the trailing zeros from compressed inline extent
Date: Mon, 21 Sep 2026 08:20:44 +0930 [thread overview]
Message-ID: <943e68a4d2c2dcbfbf509c540d5cdc31dff5d34f.1789944508.git.wqu@suse.com> (raw)
In-Reply-To: <cover.1789944508.git.wqu@suse.com>
[BEHAVIOR CHANGE]
After commit 3eaf5f082c4c ("btrfs: extract inlined creation into a
dedicated delalloc helper"), btrfs changed its behavior when generating
compressed inlined extents.
Previously the compression input was the file range [0, i_size), but
after that commit the input is file range [0, sectorsize).
This means the decompression handling needs to have a buffer that is no
smaller than sectorsize, or the decompression will fail.
This has already caused problems for other projects, like u-boot and
btrfs-restore from btrfs-progs.
Although those projects are fixed with a more robust decompression path,
this kernel change also causes extra space usage for compressed inlined
extents:
All doing a 3K writes with content filled with 0xcd
Before:
item 6 key (257 EXTENT_DATA 0) itemoff 15794 itemsize 69
generation 9 type 0 (inline)
inline extent data size 48 ram_bytes 3072 compression 2 (lzo) encryption 0
After:
item 6 key (257 EXTENT_DATA 0) itemoff 15781 itemsize 82
generation 9 type 0 (inline)
inline extent data size 61 ram_bytes 3072 compression 2 (lzo) encryption 0
This behavior change also increased the lzo compressed size from 48 bytes to 61 bytes.
[FIX]
The previous patch "btrfs: lzo: fix space saving checks which prevents
inline extents" fixed a regression in lzo_compress_bio() where it doesn't
properly handle ranges smaller than a sector.
With that regression fixed, we can finally pass the range [0, i_size) into
btrfs_compress_bio(), and this gets rid of the trailing zeros,
restoring the old behavior, along with the older and better
compression ratio.
Fixes: 3eaf5f082c4c ("btrfs: extract inlined creation into a dedicated delalloc helper")
Reported-by: Hanabishi <i.r.e.c.c.a.k.u.n+kernel.org@gmail.com>
Link: https://lore.kernel.org/linux-btrfs/c97652a5-ac6b-4de6-aa23-3cdebc01d00b@gmail.com/
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
fs/btrfs/inode.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 53f4532593b3..5e083ea5c577 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -2342,12 +2342,7 @@ static int run_delalloc_inline(struct btrfs_inode *inode, struct folio *locked_f
} else if (inode->prop_compress) {
compress_type = inode->prop_compress;
}
- /*
- * We need to pass blocksize and not i_size, otherwise we can't
- * create compressed inline extents for data smaller than sector
- * size with lzo.
- */
- cb = btrfs_compress_bio(inode, 0, blocksize, compress_type, compress_level, 0);
+ cb = btrfs_compress_bio(inode, 0, i_size, compress_type, compress_level, 0);
if (IS_ERR(cb)) {
cb = NULL;
/* Just fall back to non-compressed case. */
--
2.55.0
prev parent reply other threads:[~2026-09-20 22:51 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-20 22:50 [PATCH v2 0/2] btrfs: remove the tailing zeros from compressed inline extents Qu Wenruo
2026-09-20 22:50 ` [PATCH v2 1/2] btrfs: lzo: fix space saving checks Qu Wenruo
2026-09-20 22:50 ` Qu Wenruo [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=943e68a4d2c2dcbfbf509c540d5cdc31dff5d34f.1789944508.git.wqu@suse.com \
--to=wqu@suse.com \
--cc=i.r.e.c.c.a.k.u.n+kernel.org@gmail.com \
--cc=linux-btrfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox