Btrfs: fix check-integrity to look at the referenced data properly
We were looking at file_extent_num_bytes unconditionally when looking at referenced data bytes, but this isn't correct for compression. Fix this by checking the compression of the file extent we are and setting num_bytes to disk_num_bytes in the case of compression so that we are marking the proper bytes as referenced. This fixes check_int_data freaking out when running btrfs/004. Thanks, Signed-off-by: Josef Bacik <jbacik@fusionio.com> Signed-off-by: Chris Mason <clm@fb.com>
This commit is contained in:
Родитель
16e7549f04
Коммит
e20d6c5ba3
|
@ -1456,10 +1456,14 @@ static int btrfsic_handle_extent_data(
|
|||
btrfsic_read_from_block_data(block_ctx, &file_extent_item,
|
||||
file_extent_item_offset,
|
||||
sizeof(struct btrfs_file_extent_item));
|
||||
next_bytenr = btrfs_stack_file_extent_disk_bytenr(&file_extent_item) +
|
||||
btrfs_stack_file_extent_offset(&file_extent_item);
|
||||
generation = btrfs_stack_file_extent_generation(&file_extent_item);
|
||||
num_bytes = btrfs_stack_file_extent_num_bytes(&file_extent_item);
|
||||
next_bytenr = btrfs_stack_file_extent_disk_bytenr(&file_extent_item);
|
||||
if (btrfs_stack_file_extent_compression(&file_extent_item) ==
|
||||
BTRFS_COMPRESS_NONE) {
|
||||
next_bytenr += btrfs_stack_file_extent_offset(&file_extent_item);
|
||||
num_bytes = btrfs_stack_file_extent_num_bytes(&file_extent_item);
|
||||
} else {
|
||||
num_bytes = btrfs_stack_file_extent_disk_num_bytes(&file_extent_item);
|
||||
}
|
||||
generation = btrfs_stack_file_extent_generation(&file_extent_item);
|
||||
|
||||
if (state->print_mask & BTRFSIC_PRINT_MASK_VERY_VERBOSE)
|
||||
|
|
|
@ -2927,6 +2927,10 @@ BTRFS_SETGET_STACK_FUNCS(stack_file_extent_generation,
|
|||
struct btrfs_file_extent_item, generation, 64);
|
||||
BTRFS_SETGET_STACK_FUNCS(stack_file_extent_num_bytes,
|
||||
struct btrfs_file_extent_item, num_bytes, 64);
|
||||
BTRFS_SETGET_STACK_FUNCS(stack_file_extent_disk_num_bytes,
|
||||
struct btrfs_file_extent_item, disk_num_bytes, 64);
|
||||
BTRFS_SETGET_STACK_FUNCS(stack_file_extent_compression,
|
||||
struct btrfs_file_extent_item, compression, 8);
|
||||
|
||||
static inline unsigned long
|
||||
btrfs_file_extent_inline_start(struct btrfs_file_extent_item *e)
|
||||
|
|
Загрузка…
Ссылка в новой задаче