| /* SPDX-License-Identifier: GPL-2.0 */ | |
| #ifndef _BCACHEFS_EC_FORMAT_H | |
| #define _BCACHEFS_EC_FORMAT_H | |
| struct bch_stripe { | |
| struct bch_val v; | |
| __le16 sectors; | |
| __u8 algorithm; | |
| __u8 nr_blocks; | |
| __u8 nr_redundant; | |
| __u8 csum_granularity_bits; | |
| __u8 csum_type; | |
| /* | |
| * XXX: targets should be 16 bits - fix this if we ever do a stripe_v2 | |
| * | |
| * we can manage with this because this only needs to point to a | |
| * disk label, not a target: | |
| */ | |
| __u8 disk_label; | |
| /* | |
| * Variable length sections: | |
| * - Pointers | |
| * - Checksums | |
| * 2D array of [stripe block/device][csum block], with checksum block | |
| * size given by csum_granularity_bits | |
| * - Block sector counts: per-block array of u16s | |
| * | |
| * XXX: | |
| * Either checksums should have come last, or we should have included a | |
| * checksum_size field (the size in bytes of the checksum itself, not | |
| * the blocksize the checksum covers). | |
| * | |
| * Currently we aren't able to access the block sector counts if the | |
| * checksum type is unknown. | |
| */ | |
| struct bch_extent_ptr ptrs[]; | |
| } __packed __aligned(8); | |
| #endif /* _BCACHEFS_EC_FORMAT_H */ |