[PATCH v2 7/8] btrfs-progs: check: update inline extent length checking
From: Daniel Vacek
Date: Wed Jun 24 2026 - 12:54:15 EST
From: Sweet Tea Dorminy <sweettea-kernel@xxxxxxxxxx>
As part of the encryption changes, encrypted inline file extents record
their actual data length in ram_bytes, like compressed inline file
extents, while the item's length records the actual size. As such,
encrypted inline extents must be treated like compressed ones for
inode length consistency checking.
Signed-off-by: Sweet Tea Dorminy <sweettea-kernel@xxxxxxxxxx>
Signed-off-by: Daniel Vacek <neelx@xxxxxxxx>
---
check/main.c | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/check/main.c b/check/main.c
index 2df55edc..4902cbd9 100644
--- a/check/main.c
+++ b/check/main.c
@@ -1722,7 +1722,7 @@ static int process_file_extent(struct btrfs_root *root,
u64 mask = gfs_info->sectorsize - 1;
u32 max_inline_size = min_t(u32, gfs_info->sectorsize,
BTRFS_MAX_INLINE_DATA_SIZE(gfs_info));
- u8 compression;
+ u8 compression, encryption;
int extent_type;
int ret;
@@ -1747,25 +1747,25 @@ static int process_file_extent(struct btrfs_root *root,
fi = btrfs_item_ptr(eb, slot, struct btrfs_file_extent_item);
extent_type = btrfs_file_extent_type(eb, fi);
compression = btrfs_file_extent_compression(eb, fi);
+ encryption = btrfs_file_extent_encryption(eb, fi);
if (extent_type == BTRFS_FILE_EXTENT_INLINE) {
- num_bytes = btrfs_file_extent_ram_bytes(eb, fi);
- if (num_bytes == 0)
+ u64 num_decoded_bytes = btrfs_file_extent_ram_bytes(eb, fi);
+ u64 num_disk_bytes = btrfs_file_extent_inline_item_len(eb, slot);
+ if (num_decoded_bytes == 0)
rec->errors |= I_ERR_BAD_FILE_EXTENT;
- if (compression) {
- if (btrfs_file_extent_inline_item_len(eb, slot) >
- max_inline_size ||
- num_bytes > gfs_info->sectorsize)
+ if (compression || encryption) {
+ if (num_disk_bytes > max_inline_size ||
+ num_decoded_bytes > gfs_info->sectorsize)
rec->errors |= I_ERR_FILE_EXTENT_TOO_LARGE;
} else {
- if (num_bytes > max_inline_size)
+ if (num_decoded_bytes > max_inline_size)
rec->errors |= I_ERR_FILE_EXTENT_TOO_LARGE;
- if (btrfs_file_extent_inline_item_len(eb, slot) !=
- num_bytes)
+ if (num_disk_bytes != num_decoded_bytes)
rec->errors |= I_ERR_INLINE_RAM_BYTES_WRONG;
}
- rec->found_size += num_bytes;
- num_bytes = (num_bytes + mask) & ~mask;
+ rec->found_size += num_decoded_bytes;
+ num_bytes = (num_decoded_bytes + mask) & ~mask;
} else if (extent_type == BTRFS_FILE_EXTENT_REG ||
extent_type == BTRFS_FILE_EXTENT_PREALLOC) {
num_bytes = btrfs_file_extent_num_bytes(eb, fi);
--
2.53.0