]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/bset.c
Update bcachefs sources to c887148ebf99 thread_with_file: add f_ops.flush
[bcachefs-tools-debian] / libbcachefs / bset.c
index 3bd50f12f5a4ce2306fcc666cddc6f27abc486ee..1d77aa55d641c66d86e29ca19162acb1afb44a70 100644 (file)
@@ -9,18 +9,15 @@
 #include "bcachefs.h"
 #include "btree_cache.h"
 #include "bset.h"
-#include "eytzinger.h"
+#include "trace.h"
 #include "util.h"
 
 #include <asm/unaligned.h>
 #include <linux/console.h>
+#include <linux/eytzinger.h>
 #include <linux/random.h>
 #include <linux/prefetch.h>
 
-/* hack.. */
-#include "alloc_types.h"
-#include <trace/events/bcachefs.h>
-
 static inline void __bch2_btree_node_iter_advance(struct btree_node_iter *,
                                                  struct btree *);
 
@@ -71,6 +68,12 @@ void bch2_dump_bset(struct bch_fs *c, struct btree *b,
             _k = _n) {
                _n = bkey_p_next(_k);
 
+               if (!_k->u64s) {
+                       printk(KERN_ERR "block %u key %5zu - u64s 0? aieee!\n", set,
+                              _k->_data - i->_data);
+                       break;
+               }
+
                k = bkey_disassemble(b, _k, &uk);
 
                printbuf_reset(&buf);
@@ -175,10 +178,10 @@ static void bch2_btree_node_iter_next_check(struct btree_node_iter *_iter,
                printk(KERN_ERR "iter was:");
 
                btree_node_iter_for_each(_iter, set) {
-                       struct bkey_packed *k = __btree_node_offset_to_key(b, set->k);
-                       struct bset_tree *t = bch2_bkey_to_bset(b, k);
+                       struct bkey_packed *k2 = __btree_node_offset_to_key(b, set->k);
+                       struct bset_tree *t = bch2_bkey_to_bset(b, k2);
                        printk(" [%zi %zi]", t - b->set,
-                              k->_data - bset(b, t)->_data);
+                              k2->_data - bset(b, t)->_data);
                }
                panic("\n");
        }
@@ -235,7 +238,7 @@ void bch2_verify_insert_pos(struct btree *b, struct bkey_packed *where,
 {
        struct bset_tree *t = bch2_bkey_to_bset(b, where);
        struct bkey_packed *prev = bch2_bkey_prev_all(b, t, where);
-       struct bkey_packed *next = (void *) (where->_data + clobber_u64s);
+       struct bkey_packed *next = (void *) ((u64 *) where->_data + clobber_u64s);
        struct printbuf buf1 = PRINTBUF;
        struct printbuf buf2 = PRINTBUF;
 #if 0
@@ -303,7 +306,8 @@ static unsigned bkey_float_byte_offset(unsigned idx)
 }
 
 struct ro_aux_tree {
-       struct bkey_float       f[0];
+       u8                      nothing[0];
+       struct bkey_float       f[];
 };
 
 struct rw_aux_tree {
@@ -479,7 +483,7 @@ static struct bkey_packed *tree_to_prev_bkey(const struct btree *b,
 {
        unsigned prev_u64s = ro_aux_tree_prev(b, t)[j];
 
-       return (void *) (tree_to_bkey(b, t, j)->_data - prev_u64s);
+       return (void *) ((u64 *) tree_to_bkey(b, t, j)->_data - prev_u64s);
 }
 
 static struct rw_aux_tree *rw_aux_tree(const struct btree *b,
@@ -602,11 +606,10 @@ static inline unsigned bkey_mantissa(const struct bkey_packed *k,
        return (u16) v;
 }
 
-__always_inline
-static inline void make_bfloat(struct btree *b, struct bset_tree *t,
-                              unsigned j,
-                              struct bkey_packed *min_key,
-                              struct bkey_packed *max_key)
+static __always_inline void make_bfloat(struct btree *b, struct bset_tree *t,
+                                       unsigned j,
+                                       struct bkey_packed *min_key,
+                                       struct bkey_packed *max_key)
 {
        struct bkey_float *f = bkey_float(b, t, j);
        struct bkey_packed *m = tree_to_bkey(b, t, j);
@@ -717,7 +720,7 @@ static noinline void __build_ro_aux_tree(struct btree *b, struct bset_tree *t)
 {
        struct bkey_packed *prev = NULL, *k = btree_bkey_first(b, t);
        struct bkey_i min_key, max_key;
-       unsigned j, cacheline = 1;
+       unsigned cacheline = 1;
 
        t->size = min(bkey_to_cacheline(b, t, btree_bkey_last(b, t)),
                      bset_ro_tree_capacity(b, t));
@@ -820,13 +823,12 @@ void bch2_bset_init_first(struct btree *b, struct bset *i)
        set_btree_bset(b, t, i);
 }
 
-void bch2_bset_init_next(struct bch_fs *c, struct btree *b,
-                        struct btree_node_entry *bne)
+void bch2_bset_init_next(struct btree *b, struct btree_node_entry *bne)
 {
        struct bset *i = &bne->keys;
        struct bset_tree *t;
 
-       BUG_ON(bset_byte_offset(b, bne) >= btree_bytes(c));
+       BUG_ON(bset_byte_offset(b, bne) >= btree_buf_bytes(b));
        BUG_ON((void *) bne < (void *) btree_bkey_last(b, bset_tree_last(b)));
        BUG_ON(b->nsets >= MAX_BSETS);
 
@@ -1014,8 +1016,8 @@ void bch2_bset_insert(struct btree *b,
                btree_keys_account_key_add(&b->nr, t - b->set, src);
 
        if (src->u64s != clobber_u64s) {
-               u64 *src_p = where->_data + clobber_u64s;
-               u64 *dst_p = where->_data + src->u64s;
+               u64 *src_p = (u64 *) where->_data + clobber_u64s;
+               u64 *dst_p = (u64 *) where->_data + src->u64s;
 
                EBUG_ON((int) le16_to_cpu(bset(b, t)->u64s) <
                        (int) clobber_u64s - src->u64s);
@@ -1025,7 +1027,7 @@ void bch2_bset_insert(struct btree *b,
                set_btree_bset_end(b, t);
        }
 
-       memcpy_u64s(where, src,
+       memcpy_u64s_small(where, src,
                    bkeyp_key_u64s(f, src));
        memcpy_u64s(bkeyp_val(f, where), &insert->v,
                    bkeyp_val_u64s(f, src));
@@ -1041,7 +1043,7 @@ void bch2_bset_delete(struct btree *b,
                      unsigned clobber_u64s)
 {
        struct bset_tree *t = bset_tree_last(b);
-       u64 *src_p = where->_data + clobber_u64s;
+       u64 *src_p = (u64 *) where->_data + clobber_u64s;
        u64 *dst_p = where->_data;
 
        bch2_bset_verify_rw_aux_tree(b, t);
@@ -1192,7 +1194,7 @@ struct bkey_packed *__bch2_bset_search(struct btree *b,
        case BSET_RO_AUX_TREE:
                return bset_search_tree(b, t, search, lossy_packed_search);
        default:
-               unreachable();
+               BUG();
        }
 }
 
@@ -1272,9 +1274,13 @@ static void btree_node_iter_init_pack_failed(struct btree_node_iter *iter,
 }
 
 /**
- * bch_btree_node_iter_init - initialize a btree node iterator, starting from a
+ * bch2_btree_node_iter_init - initialize a btree node iterator, starting from a
  * given position
  *
+ * @iter:      iterator to initialize
+ * @b:         btree node to search
+ * @search:    search key
+ *
  * Main entry point to the lookup code for individual btree nodes:
  *
  * NOTE:
@@ -1536,9 +1542,9 @@ struct bkey_s_c bch2_btree_node_iter_peek_unpack(struct btree_node_iter *iter,
 
 /* Mergesort */
 
-void bch2_btree_keys_stats(struct btree *b, struct bset_stats *stats)
+void bch2_btree_keys_stats(const struct btree *b, struct bset_stats *stats)
 {
-       struct bset_tree *t;
+       const struct bset_tree *t;
 
        for_each_bset(b, t) {
                enum bset_aux_tree_type type = bset_aux_tree_type(t);