]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/alloc_background.h
Update bcachefs sources to 5e392aed7a bcachefs: Kill bch2_alloc_write()
[bcachefs-tools-debian] / libbcachefs / alloc_background.h
index 06539e036f13cacf127b6af17e3ebd86b3b01d1a..da1b650e801738901511cc2ee88f963c54bc8ba9 100644 (file)
@@ -8,24 +8,10 @@
 #include "debug.h"
 #include "super.h"
 
-struct bkey_alloc_unpacked {
-       u64             journal_seq;
-       u64             bucket;
-       u8              dev;
-       u8              gen;
-       u8              oldest_gen;
-       u8              data_type;
-       bool            need_discard:1;
-       bool            need_inc_gen:1;
-#define x(_name, _bits)        u##_bits _name;
-       BCH_ALLOC_FIELDS_V2()
-#undef  x
-};
-
 /* How out of date a pointer gen is allowed to be: */
 #define BUCKET_GC_GEN_MAX      96U
 
-static inline u8 alloc_gc_gen(struct bkey_alloc_unpacked a)
+static inline u8 alloc_gc_gen(struct bch_alloc_v4 a)
 {
        return a.gen - a.oldest_gen;
 }
@@ -40,62 +26,41 @@ enum bucket_state {
 
 extern const char * const bch2_bucket_states[];
 
-static inline enum bucket_state bucket_state(struct bkey_alloc_unpacked a)
+static inline enum bucket_state bucket_state(struct bch_alloc_v4 a)
 {
        if (a.dirty_sectors || a.stripe)
                return BUCKET_dirty;
        if (a.cached_sectors)
                return BUCKET_cached;
        BUG_ON(a.data_type);
-       if (a.need_discard)
+       if (BCH_ALLOC_V4_NEED_DISCARD(&a))
                return BUCKET_need_discard;
        if (alloc_gc_gen(a) >= BUCKET_GC_GEN_MAX)
                return BUCKET_need_gc_gens;
        return BUCKET_free;
 }
 
-static inline u64 alloc_lru_idx(struct bkey_alloc_unpacked a)
+static inline u64 alloc_lru_idx(struct bch_alloc_v4 a)
 {
-       return bucket_state(a) == BUCKET_cached ? a.read_time : 0;
+       return bucket_state(a) == BUCKET_cached ? a.io_time[READ] : 0;
 }
 
-static inline u64 alloc_freespace_genbits(struct bkey_alloc_unpacked a)
+static inline u64 alloc_freespace_genbits(struct bch_alloc_v4 a)
 {
        return ((u64) alloc_gc_gen(a) >> 4) << 56;
 }
 
-static inline struct bpos alloc_freespace_pos(struct bkey_alloc_unpacked a)
-{
-       return POS(a.dev, a.bucket | alloc_freespace_genbits(a));
-}
-
-/* returns true if not equal */
-static inline bool bkey_alloc_unpacked_cmp(struct bkey_alloc_unpacked l,
-                                          struct bkey_alloc_unpacked r)
+static inline struct bpos alloc_freespace_pos(struct bpos pos, struct bch_alloc_v4 a)
 {
-       return  l.gen != r.gen                  ||
-               l.oldest_gen != r.oldest_gen    ||
-               l.data_type != r.data_type
-#define x(_name, ...)  || l._name != r._name
-       BCH_ALLOC_FIELDS_V2()
-#undef  x
-       ;
+       pos.offset |= alloc_freespace_genbits(a);
+       return pos;
 }
 
-struct bkey_alloc_buf {
-       struct bkey_i   k;
-       struct bch_alloc_v3 v;
-
-#define x(_name,  _bits)               + _bits / 8
-       u8              _pad[0 + BCH_ALLOC_FIELDS_V2()];
-#undef  x
-} __attribute__((packed, aligned(8)));
+struct bkey_i_alloc_v4 *
+bch2_trans_start_alloc_update(struct btree_trans *, struct btree_iter *, struct bpos);
 
-struct bkey_alloc_unpacked bch2_alloc_unpack(struct bkey_s_c);
-struct bkey_alloc_buf *bch2_alloc_pack(struct btree_trans *,
-                                      const struct bkey_alloc_unpacked);
-int bch2_alloc_write(struct btree_trans *, struct btree_iter *,
-                    struct bkey_alloc_unpacked *, unsigned);
+void bch2_alloc_to_v4(struct bkey_s_c, struct bch_alloc_v4 *);
+struct bkey_i_alloc_v4 *bch2_alloc_to_v4_mut(struct btree_trans *, struct bkey_s_c);
 
 int bch2_bucket_io_time_reset(struct btree_trans *, unsigned, size_t, int);
 
@@ -104,6 +69,8 @@ int bch2_bucket_io_time_reset(struct btree_trans *, unsigned, size_t, int);
 const char *bch2_alloc_v1_invalid(const struct bch_fs *, struct bkey_s_c);
 const char *bch2_alloc_v2_invalid(const struct bch_fs *, struct bkey_s_c);
 const char *bch2_alloc_v3_invalid(const struct bch_fs *, struct bkey_s_c);
+const char *bch2_alloc_v4_invalid(const struct bch_fs *, struct bkey_s_c k);
+void bch2_alloc_v4_swab(struct bkey_s);
 void bch2_alloc_to_text(struct printbuf *, struct bch_fs *, struct bkey_s_c);
 
 #define bch2_bkey_ops_alloc (struct bkey_ops) {                \
@@ -127,6 +94,14 @@ void bch2_alloc_to_text(struct printbuf *, struct bch_fs *, struct bkey_s_c);
        .atomic_trigger = bch2_mark_alloc,              \
 }
 
+#define bch2_bkey_ops_alloc_v4 (struct bkey_ops) {     \
+       .key_invalid    = bch2_alloc_v4_invalid,        \
+       .val_to_text    = bch2_alloc_to_text,           \
+       .swab           = bch2_alloc_v4_swab,           \
+       .trans_trigger  = bch2_trans_mark_alloc,        \
+       .atomic_trigger = bch2_mark_alloc,              \
+}
+
 static inline bool bkey_is_alloc(const struct bkey *k)
 {
        return  k->type == KEY_TYPE_alloc ||