/* 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 */