]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/bkey.c
New upstream release
[bcachefs-tools-debian] / libbcachefs / bkey.c
index 630df060fbe934b5ff8d936eed91b13b792f8f81..ee7ba700e75f4ee3afbac3ab241c7d6d9b1278c3 100644 (file)
@@ -262,14 +262,6 @@ bool bch2_bkey_transform(const struct bkey_format *out_f,
        return true;
 }
 
-#define bkey_fields()                                                  \
-       x(BKEY_FIELD_INODE,             p.inode)                        \
-       x(BKEY_FIELD_OFFSET,            p.offset)                       \
-       x(BKEY_FIELD_SNAPSHOT,          p.snapshot)                     \
-       x(BKEY_FIELD_SIZE,              size)                           \
-       x(BKEY_FIELD_VERSION_HI,        version.hi)                     \
-       x(BKEY_FIELD_VERSION_LO,        version.lo)
-
 struct bkey __bch2_bkey_unpack_key(const struct bkey_format *format,
                              const struct bkey_packed *in)
 {
@@ -331,15 +323,6 @@ bool bch2_bkey_pack_key(struct bkey_packed *out, const struct bkey *in,
 #define x(id, field)   if (!set_inc_field(&state, id, in->field)) return false;
        bkey_fields()
 #undef x
-
-       /*
-        * Extents - we have to guarantee that if an extent is packed, a trimmed
-        * version will also pack:
-        */
-       if (bkey_start_offset(in) <
-           le64_to_cpu(format->field_offset[BKEY_FIELD_OFFSET]))
-               return false;
-
        pack_state_finish(&state, out);
        out->u64s       = format->key_u64s + in->u64s - BKEY_U64s;
        out->format     = KEY_FORMAT_LOCAL_BTREE;
@@ -377,7 +360,7 @@ bool bch2_bkey_pack(struct bkey_packed *out, const struct bkey_i *in,
        memmove_u64s((u64 *) out + format->key_u64s,
                     &in->v,
                     bkey_val_u64s(&in->k));
-       memcpy_u64s(out, &tmp, format->key_u64s);
+       memcpy_u64s_small(out, &tmp, format->key_u64s);
 
        return true;
 }
@@ -505,18 +488,18 @@ enum bkey_pack_pos_ret bch2_bkey_pack_pos_lossy(struct bkey_packed *out,
                     le64_to_cpu(f->field_offset[BKEY_FIELD_INODE])))
                return BKEY_PACK_POS_FAIL;
 
-       if (!set_inc_field_lossy(&state, BKEY_FIELD_INODE, in.inode)) {
+       if (unlikely(!set_inc_field_lossy(&state, BKEY_FIELD_INODE, in.inode))) {
                in.offset       = KEY_OFFSET_MAX;
                in.snapshot     = KEY_SNAPSHOT_MAX;
                exact = false;
        }
 
-       if (!set_inc_field_lossy(&state, BKEY_FIELD_OFFSET, in.offset)) {
+       if (unlikely(!set_inc_field_lossy(&state, BKEY_FIELD_OFFSET, in.offset))) {
                in.snapshot     = KEY_SNAPSHOT_MAX;
                exact = false;
        }
 
-       if (!set_inc_field_lossy(&state, BKEY_FIELD_SNAPSHOT, in.snapshot))
+       if (unlikely(!set_inc_field_lossy(&state, BKEY_FIELD_SNAPSHOT, in.snapshot)))
                exact = false;
 
        pack_state_finish(&state, out);
@@ -553,24 +536,6 @@ void bch2_bkey_format_init(struct bkey_format_state *s)
        s->field_min[BKEY_FIELD_SIZE] = 0;
 }
 
-static void __bkey_format_add(struct bkey_format_state *s,
-                             unsigned field, u64 v)
-{
-       s->field_min[field] = min(s->field_min[field], v);
-       s->field_max[field] = max(s->field_max[field], v);
-}
-
-/*
- * Changes @format so that @k can be successfully packed with @format
- */
-void bch2_bkey_format_add_key(struct bkey_format_state *s, const struct bkey *k)
-{
-#define x(id, field) __bkey_format_add(s, id, k->field);
-       bkey_fields()
-#undef x
-       __bkey_format_add(s, BKEY_FIELD_OFFSET, bkey_start_offset(k));
-}
-
 void bch2_bkey_format_add_pos(struct bkey_format_state *s, struct bpos p)
 {
        unsigned field = 0;
@@ -759,7 +724,7 @@ unsigned bch2_bkey_ffs(const struct btree *b, const struct bkey_packed *k)
        return 0;
 }
 
-#ifdef CONFIG_X86_64
+#ifdef HAVE_BCACHEFS_COMPILED_UNPACK
 
 #define I(_x)                  (*(out)++ = (_x))
 #define I1(i0)                                         I(i0)