| /* SPDX-License-Identifier: GPL-2.0 */ |
| #ifndef _BCACHEFS_ALLOC_BACKGROUND_FORMAT_H |
| #define _BCACHEFS_ALLOC_BACKGROUND_FORMAT_H |
| |
| struct bch_alloc { |
| struct bch_val v; |
| __u8 fields; |
| __u8 gen; |
| __u8 data[]; |
| } __packed __aligned(8); |
| |
| #define BCH_ALLOC_FIELDS_V1() \ |
| x(read_time, 16) \ |
| x(write_time, 16) \ |
| x(data_type, 8) \ |
| x(dirty_sectors, 16) \ |
| x(cached_sectors, 16) \ |
| x(oldest_gen, 8) \ |
| x(stripe, 32) \ |
| x(stripe_redundancy, 8) |
| |
| enum { |
| #define x(name, _bits) BCH_ALLOC_FIELD_V1_##name, |
| BCH_ALLOC_FIELDS_V1() |
| #undef x |
| }; |
| |
| struct bch_alloc_v2 { |
| struct bch_val v; |
| __u8 nr_fields; |
| __u8 gen; |
| __u8 oldest_gen; |
| __u8 data_type; |
| __u8 data[]; |
| } __packed __aligned(8); |
| |
| #define BCH_ALLOC_FIELDS_V2() \ |
| x(read_time, 64) \ |
| x(write_time, 64) \ |
| x(dirty_sectors, 32) \ |
| x(cached_sectors, 32) \ |
| x(stripe, 32) \ |
| x(stripe_redundancy, 8) |
| |
| struct bch_alloc_v3 { |
| struct bch_val v; |
| __le64 journal_seq; |
| __le32 flags; |
| __u8 nr_fields; |
| __u8 gen; |
| __u8 oldest_gen; |
| __u8 data_type; |
| __u8 data[]; |
| } __packed __aligned(8); |
| |
| LE32_BITMASK(BCH_ALLOC_V3_NEED_DISCARD,struct bch_alloc_v3, flags, 0, 1) |
| LE32_BITMASK(BCH_ALLOC_V3_NEED_INC_GEN,struct bch_alloc_v3, flags, 1, 2) |
| |
| struct bch_alloc_v4 { |
| struct bch_val v; |
| __u64 journal_seq; |
| __u32 flags; |
| __u8 gen; |
| __u8 oldest_gen; |
| __u8 data_type; |
| __u8 stripe_redundancy; |
| __u32 dirty_sectors; |
| __u32 cached_sectors; |
| __u64 io_time[2]; |
| __u32 stripe; |
| __u32 nr_external_backpointers; |
| /* end of fields in original version of alloc_v4 */ |
| __u64 _fragmentation_lru; /* obsolete */ |
| __u32 stripe_sectors; |
| __u32 pad; |
| } __packed __aligned(8); |
| |
| #define BCH_ALLOC_V4_U64s_V0 6 |
| #define BCH_ALLOC_V4_U64s (sizeof(struct bch_alloc_v4) / sizeof(__u64)) |
| |
| BITMASK(BCH_ALLOC_V4_NEED_DISCARD, struct bch_alloc_v4, flags, 0, 1) |
| BITMASK(BCH_ALLOC_V4_NEED_INC_GEN, struct bch_alloc_v4, flags, 1, 2) |
| BITMASK(BCH_ALLOC_V4_BACKPOINTERS_START,struct bch_alloc_v4, flags, 2, 8) |
| BITMASK(BCH_ALLOC_V4_NR_BACKPOINTERS, struct bch_alloc_v4, flags, 8, 14) |
| |
| #define KEY_TYPE_BUCKET_GENS_BITS 8 |
| #define KEY_TYPE_BUCKET_GENS_NR (1U << KEY_TYPE_BUCKET_GENS_BITS) |
| #define KEY_TYPE_BUCKET_GENS_MASK (KEY_TYPE_BUCKET_GENS_NR - 1) |
| |
| struct bch_bucket_gens { |
| struct bch_val v; |
| u8 gens[KEY_TYPE_BUCKET_GENS_NR]; |
| } __packed __aligned(8); |
| |
| #endif /* _BCACHEFS_ALLOC_BACKGROUND_FORMAT_H */ |