From: Sweet Tea Dorminy <[email protected]>

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 <[email protected]>
Signed-off-by: Daniel Vacek <[email protected]>
---
 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


Reply via email to