]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/bkey.h
Update bcachefs sources to e2b8120595 bcachefs: Use x-macros for more enums
[bcachefs-tools-debian] / libbcachefs / bkey.h
index 9106bea9ac067d2a7eb4c4908ce461f037d5e3fe..a22a1dc6df789a171688f8e7c139f62ce152b550 100644 (file)
@@ -67,13 +67,6 @@ static inline void set_bkey_val_bytes(struct bkey *k, unsigned bytes)
 #define bkey_whiteout(_k)                              \
        ((_k)->type == KEY_TYPE_deleted || (_k)->type == KEY_TYPE_discard)
 
-#define bkey_packed_typecheck(_k)                                      \
-({                                                                     \
-       BUILD_BUG_ON(!type_is(_k, struct bkey *) &&                     \
-                    !type_is(_k, struct bkey_packed *));               \
-       type_is(_k, struct bkey_packed *);                              \
-})
-
 enum bkey_lr_packed {
        BKEY_PACKED_BOTH,
        BKEY_PACKED_RIGHT,
@@ -81,9 +74,6 @@ enum bkey_lr_packed {
        BKEY_PACKED_NONE,
 };
 
-#define bkey_lr_packed_typecheck(_l, _r)                               \
-       (!bkey_packed_typecheck(_l) + ((!bkey_packed_typecheck(_r)) << 1))
-
 #define bkey_lr_packed(_l, _r)                                         \
        ((_l)->format + ((_r)->format << 1))
 
@@ -132,9 +122,9 @@ int __bch2_bkey_cmp_left_packed_format_checked(const struct btree *,
                                          const struct bpos *);
 
 __pure
-int __bch2_bkey_cmp_packed(const struct bkey_packed *,
-                          const struct bkey_packed *,
-                          const struct btree *);
+int bch2_bkey_cmp_packed(const struct btree *,
+                        const struct bkey_packed *,
+                        const struct bkey_packed *);
 
 __pure
 int __bch2_bkey_cmp_left_packed(const struct btree *,
@@ -160,37 +150,6 @@ static inline int bkey_cmp_left_packed_byval(const struct btree *b,
        return bkey_cmp_left_packed(b, l, &r);
 }
 
-/*
- * If @_l or @_r are struct bkey * (not bkey_packed *), uses type information to
- * skip dispatching on k->format:
- */
-#define bkey_cmp_packed(_b, _l, _r)                                    \
-({                                                                     \
-       int _cmp;                                                       \
-                                                                       \
-       switch (bkey_lr_packed_typecheck(_l, _r)) {                     \
-       case BKEY_PACKED_NONE:                                          \
-               _cmp = bkey_cmp(((struct bkey *) (_l))->p,              \
-                               ((struct bkey *) (_r))->p);             \
-               break;                                                  \
-       case BKEY_PACKED_LEFT:                                          \
-               _cmp = bkey_cmp_left_packed((_b),                       \
-                                 (struct bkey_packed *) (_l),          \
-                                 &((struct bkey *) (_r))->p);          \
-               break;                                                  \
-       case BKEY_PACKED_RIGHT:                                         \
-               _cmp = -bkey_cmp_left_packed((_b),                      \
-                                 (struct bkey_packed *) (_r),          \
-                                 &((struct bkey *) (_l))->p);          \
-               break;                                                  \
-       case BKEY_PACKED_BOTH:                                          \
-               _cmp = __bch2_bkey_cmp_packed((void *) (_l),            \
-                                        (void *) (_r), (_b));          \
-               break;                                                  \
-       }                                                               \
-       _cmp;                                                           \
-})
-
 #if 1
 static __always_inline int bkey_cmp(struct bpos l, struct bpos r)
 {
@@ -211,6 +170,11 @@ static inline struct bpos bpos_min(struct bpos l, struct bpos r)
        return bkey_cmp(l, r) < 0 ? l : r;
 }
 
+static inline struct bpos bpos_max(struct bpos l, struct bpos r)
+{
+       return bkey_cmp(l, r) > 0 ? l : r;
+}
+
 void bch2_bpos_swab(struct bpos *);
 void bch2_bkey_swab_key(const struct bkey_format *, struct bkey_packed *);
 
@@ -400,9 +364,8 @@ static inline int bch2_compile_bkey_format(const struct bkey_format *format,
 static inline void bkey_reassemble(struct bkey_i *dst,
                                   struct bkey_s_c src)
 {
-       BUG_ON(bkey_packed(src.k));
        dst->k = *src.k;
-       memcpy_u64s(&dst->v, src.v, bkey_val_u64s(src.k));
+       memcpy_u64s_small(&dst->v, src.v, bkey_val_u64s(src.k));
 }
 
 #define bkey_s_null            ((struct bkey_s)   { .k = NULL })
@@ -440,7 +403,7 @@ static inline struct bkey_s_c bkey_i_to_s_c(const struct bkey_i *k)
  * bkey_i_extent to a bkey_i - since that's always safe, instead of conversion
  * functions.
  */
-#define BKEY_VAL_ACCESSORS(name)                                       \
+#define x(name, ...)                                   \
 struct bkey_i_##name {                                                 \
        union {                                                         \
                struct bkey             k;                              \
@@ -551,21 +514,8 @@ static inline struct bkey_i_##name *bkey_##name##_init(struct bkey_i *_k)\
        return k;                                                       \
 }
 
-BKEY_VAL_ACCESSORS(cookie);
-BKEY_VAL_ACCESSORS(btree_ptr);
-BKEY_VAL_ACCESSORS(extent);
-BKEY_VAL_ACCESSORS(reservation);
-BKEY_VAL_ACCESSORS(inode);
-BKEY_VAL_ACCESSORS(inode_generation);
-BKEY_VAL_ACCESSORS(dirent);
-BKEY_VAL_ACCESSORS(xattr);
-BKEY_VAL_ACCESSORS(alloc);
-BKEY_VAL_ACCESSORS(quota);
-BKEY_VAL_ACCESSORS(stripe);
-BKEY_VAL_ACCESSORS(reflink_p);
-BKEY_VAL_ACCESSORS(reflink_v);
-BKEY_VAL_ACCESSORS(inline_data);
-BKEY_VAL_ACCESSORS(btree_ptr_v2);
+BCH_BKEY_TYPES();
+#undef x
 
 /* byte order helpers */