{
u16 num_stripes = btrfs_chunk_num_stripes(eb, chunk);
int i;
- u32 chunk_item_size = btrfs_chunk_item_size(num_stripes);
+ u32 chunk_item_size;
char chunk_flags_str[32] = {0};
+ /* The chunk must contain at least one stripe */
+ if (num_stripes < 1) {
+ printf("invalid num_stripes: %u\n", num_stripes);
+ return;
+ }
+
+ chunk_item_size = btrfs_chunk_item_size(num_stripes);
+
if ((unsigned long)chunk + chunk_item_size > eb->len) {
printf("\t\tchunk item invalid\n");
return;
case BTRFS_COMPRESS_LZO:
strcpy(ret, "lzo");
break;
+ case BTRFS_COMPRESS_ZSTD:
+ strcpy(ret, "zstd");
+ break;
default:
sprintf(ret, "UNKNOWN.%d", compress_type);
}
}
}
+static void print_extent_csum(struct extent_buffer *eb,
+ struct btrfs_fs_info *fs_info, u32 item_size, u64 start)
+{
+ u32 size;
+
+ size = (item_size / btrfs_super_csum_size(fs_info->super_copy)) *
+ fs_info->sectorsize;
+ printf("\t\trange start %llu end %llu length %u\n",
+ (unsigned long long)start,
+ (unsigned long long)start + size, size);
+}
+
/* Caller must ensure sizeof(*ret) >= 14 "WRITTEN|RELOC" */
static void header_flags_to_str(u64 flags, char *ret)
{
case BTRFS_CSUM_ITEM_KEY:
printf("\t\tcsum item\n");
break;
- case BTRFS_EXTENT_CSUM_KEY: {
- u16 csum_size =
- btrfs_super_csum_size(root->fs_info->super_copy);
- u32 size = (item_size / csum_size) *
- root->fs_info->sectorsize;
- printf("\t\textent csum item range %llu-%llu\n",
- (unsigned long long)disk_key.offset,
- (unsigned long long)disk_key.offset + size);
+ case BTRFS_EXTENT_CSUM_KEY:
+ print_extent_csum(eb, root->fs_info, item_size,
+ offset);
break;
- }
case BTRFS_EXTENT_DATA_KEY:
print_file_extent_item(eb, item, i, ptr);
break;