]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/alloc_background.h
Update bcachefs sources to 9d554fa16d bcachefs: Add .to_text() methods for all superb...
[bcachefs-tools-debian] / libbcachefs / alloc_background.h
index a4f6bf56b18f6eee5266852e994f28f6d5b5f738..98c7866e20b57ded9f8d629d8427d5966f97bfb5 100644 (file)
@@ -4,11 +4,14 @@
 
 #include "bcachefs.h"
 #include "alloc_types.h"
+#include "buckets.h"
 #include "debug.h"
+#include "super.h"
 
 extern const char * const bch2_allocator_states[];
 
 struct bkey_alloc_unpacked {
+       u64             journal_seq;
        u64             bucket;
        u8              dev;
        u8              gen;
@@ -19,23 +22,6 @@ struct bkey_alloc_unpacked {
 #undef  x
 };
 
-struct bkey_alloc_buf {
-       struct bkey_i   k;
-
-       union {
-       struct {
-#define x(_name,  _bits)               + _bits / 8
-       u8              _pad[8 + BCH_ALLOC_FIELDS_V1()];
-#undef  x
-       } _v1;
-       struct {
-#define x(_name,  _bits)               + 8 + _bits / 8
-       u8              _pad[8 + BCH_ALLOC_FIELDS_V2()];
-#undef  x
-       } _v2;
-       };
-} __attribute__((packed, aligned(8)));
-
 /* How out of date a pointer gen is allowed to be: */
 #define BUCKET_GC_GEN_MAX      96U
 
@@ -52,33 +38,28 @@ static inline bool bkey_alloc_unpacked_cmp(struct bkey_alloc_unpacked l,
        ;
 }
 
+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_alloc_unpacked bch2_alloc_unpack(struct bkey_s_c);
-void bch2_alloc_pack(struct bch_fs *, struct bkey_alloc_buf *,
-                    const struct bkey_alloc_unpacked);
+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);
 
 int bch2_bucket_io_time_reset(struct btree_trans *, unsigned, size_t, int);
 
-static inline struct bkey_alloc_unpacked
-alloc_mem_to_key(struct btree_iter *iter,
-                struct bucket *g, struct bucket_mark m)
-{
-       return (struct bkey_alloc_unpacked) {
-               .dev            = iter->pos.inode,
-               .bucket         = iter->pos.offset,
-               .gen            = m.gen,
-               .oldest_gen     = g->oldest_gen,
-               .data_type      = m.data_type,
-               .dirty_sectors  = m.dirty_sectors,
-               .cached_sectors = m.cached_sectors,
-               .read_time      = g->io_time[READ],
-               .write_time     = g->io_time[WRITE],
-       };
-}
-
 #define ALLOC_SCAN_BATCH(ca)           max_t(size_t, 1, (ca)->mi.nbuckets >> 9)
 
 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);
 void bch2_alloc_to_text(struct printbuf *, struct bch_fs *, struct bkey_s_c);
 
 #define bch2_bkey_ops_alloc (struct bkey_ops) {                \
@@ -91,7 +72,19 @@ void bch2_alloc_to_text(struct printbuf *, struct bch_fs *, struct bkey_s_c);
        .val_to_text    = bch2_alloc_to_text,           \
 }
 
-int bch2_alloc_read(struct bch_fs *);
+#define bch2_bkey_ops_alloc_v3 (struct bkey_ops) {     \
+       .key_invalid    = bch2_alloc_v3_invalid,        \
+       .val_to_text    = bch2_alloc_to_text,           \
+}
+
+static inline bool bkey_is_alloc(const struct bkey *k)
+{
+       return  k->type == KEY_TYPE_alloc ||
+               k->type == KEY_TYPE_alloc_v2 ||
+               k->type == KEY_TYPE_alloc_v3;
+}
+
+int bch2_alloc_read(struct bch_fs *, bool, bool);
 
 static inline void bch2_wake_allocator(struct bch_dev *ca)
 {
@@ -129,9 +122,6 @@ void bch2_dev_allocator_quiesce(struct bch_fs *, struct bch_dev *);
 void bch2_dev_allocator_stop(struct bch_dev *);
 int bch2_dev_allocator_start(struct bch_dev *);
 
-int bch2_alloc_write(struct bch_fs *, unsigned);
 void bch2_fs_allocator_background_init(struct bch_fs *);
 
-void bch2_open_buckets_to_text(struct printbuf *, struct bch_fs *);
-
 #endif /* _BCACHEFS_ALLOC_BACKGROUND_H */