]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: KEY_TYPE_set
authorKent Overstreet <kent.overstreet@gmail.com>
Thu, 6 Jan 2022 03:13:13 +0000 (22:13 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:29 +0000 (17:09 -0400)
A new empty key type, to be used when using a btree as a set.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
fs/bcachefs/bcachefs_format.h
fs/bcachefs/bkey_methods.c

index 838754ad60c33742e5d6d7b85fc4ee005930d2ce..350317e8b34f907b4fc9ace11b2abe971c13e353 100644 (file)
@@ -351,7 +351,8 @@ static inline void bkey_init(struct bkey *k)
        x(subvolume,            21)                     \
        x(snapshot,             22)                     \
        x(inode_v2,             23)                     \
-       x(alloc_v3,             24)
+       x(alloc_v3,             24)                     \
+       x(set,                  25)
 
 enum bch_bkey_type {
 #define x(name, nr) KEY_TYPE_##name    = nr,
@@ -381,6 +382,10 @@ struct bch_hash_whiteout {
        struct bch_val          v;
 };
 
+struct bch_set {
+       struct bch_val          v;
+};
+
 /* Extents */
 
 /*
index f11b6d9f08d6b56fc91ab65263d75fe2d8db28b6..d938ee826c755df29e396c0a91d5ec47258cbc5c 100644 (file)
@@ -85,6 +85,24 @@ static void key_type_inline_data_to_text(struct printbuf *out, struct bch_fs *c,
        .val_to_text    = key_type_inline_data_to_text, \
 }
 
+static const char *key_type_set_invalid(const struct bch_fs *c, struct bkey_s_c k)
+{
+       if (bkey_val_bytes(k.k))
+               return "nonempty value";
+       return NULL;
+}
+
+static bool key_type_set_merge(struct bch_fs *c, struct bkey_s l, struct bkey_s_c r)
+{
+       bch2_key_resize(l.k, l.k->size + r.k->size);
+       return true;
+}
+
+#define bch2_bkey_ops_set (struct bkey_ops) {          \
+       .key_invalid    = key_type_set_invalid,         \
+       .key_merge      = key_type_set_merge,           \
+}
+
 const struct bkey_ops bch2_bkey_ops[] = {
 #define x(name, nr) [KEY_TYPE_##name]  = bch2_bkey_ops_##name,
        BCH_BKEY_TYPES()