]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/bset.h
Move c_src dirs back to toplevel
[bcachefs-tools-debian] / libbcachefs / bset.h
index 72e6376bce2af705ee8519abbd3af3202b2cbd53..632c2b8c54609b4be37f11e18868e4c41dcb736b 100644 (file)
@@ -211,9 +211,9 @@ static inline size_t btree_aux_data_u64s(const struct btree *b)
 #define bset_tree_for_each_key(_b, _t, _k)                             \
        for (_k = btree_bkey_first(_b, _t);                             \
             _k != btree_bkey_last(_b, _t);                             \
-            _k = bkey_next(_k))
+            _k = bkey_p_next(_k))
 
-static inline bool bset_has_ro_aux_tree(struct bset_tree *t)
+static inline bool bset_has_ro_aux_tree(const struct bset_tree *t)
 {
        return bset_aux_tree_type(t) == BSET_RO_AUX_TREE;
 }
@@ -291,6 +291,21 @@ static inline int bkey_cmp_p_or_unp(const struct btree *b,
        return __bch2_bkey_cmp_left_packed_format_checked(b, l, r);
 }
 
+static inline struct bset_tree *
+bch2_bkey_to_bset_inlined(struct btree *b, struct bkey_packed *k)
+{
+       unsigned offset = __btree_node_key_to_offset(b, k);
+       struct bset_tree *t;
+
+       for_each_bset(b, t)
+               if (offset <= t->end_offset) {
+                       EBUG_ON(offset < btree_bkey_first_offset(t));
+                       return t;
+               }
+
+       BUG();
+}
+
 struct bset_tree *bch2_bkey_to_bset(struct btree *, struct bkey_packed *);
 
 struct bkey_packed *bch2_bkey_prev_filter(struct btree *, struct bset_tree *,
@@ -432,6 +447,11 @@ struct bkey_s_c bch2_btree_node_iter_peek_unpack(struct btree_node_iter *,
                                                struct btree *,
                                                struct bkey *);
 
+#define for_each_btree_node_key(b, k, iter)                            \
+       for (bch2_btree_node_iter_init_from_start((iter), (b));         \
+            (k = bch2_btree_node_iter_peek((iter), (b)));              \
+            bch2_btree_node_iter_advance(iter, b))
+
 #define for_each_btree_node_key_unpack(b, k, iter, unpacked)           \
        for (bch2_btree_node_iter_init_from_start((iter), (b));         \
             (k = bch2_btree_node_iter_peek_unpack((iter), (b), (unpacked))).k;\
@@ -484,7 +504,7 @@ struct bset_stats {
        size_t failed;
 };
 
-void bch2_btree_keys_stats(struct btree *, struct bset_stats *);
+void bch2_btree_keys_stats(const struct btree *, struct bset_stats *);
 void bch2_bfloat_to_text(struct printbuf *, struct btree *,
                         struct bkey_packed *);