summaryrefslogtreecommitdiff
path: root/libbcachefs/bkey_methods.h
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2022-03-13 19:14:01 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2022-03-13 19:20:59 -0400
commitd34e731082d8fcd710c2af6377a3b7fa927c8451 (patch)
tree96a9a25295fcb570358e30ae04a16b2c7a7f7aa3 /libbcachefs/bkey_methods.h
parentbf7924f5526707e01213cad546794571764bc177 (diff)
Update bcachefs sources to e48731a188 bcachefs: Fix BTREE_TRIGGER_WANTS_OLD_AND_NEW
Diffstat (limited to 'libbcachefs/bkey_methods.h')
-rw-r--r--libbcachefs/bkey_methods.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/libbcachefs/bkey_methods.h b/libbcachefs/bkey_methods.h
index 4fdac545..2289a09d 100644
--- a/libbcachefs/bkey_methods.h
+++ b/libbcachefs/bkey_methods.h
@@ -6,6 +6,7 @@
struct bch_fs;
struct btree;
+struct btree_trans;
struct bkey;
enum btree_node_type;
@@ -20,6 +21,10 @@ struct bkey_ops {
void (*swab)(struct bkey_s);
bool (*key_normalize)(struct bch_fs *, struct bkey_s);
bool (*key_merge)(struct bch_fs *, struct bkey_s, struct bkey_s_c);
+ int (*trans_trigger)(struct btree_trans *, struct bkey_s_c,
+ struct bkey_i *, unsigned);
+ int (*atomic_trigger)(struct btree_trans *, struct bkey_s_c,
+ struct bkey_s_c, unsigned);
void (*compat)(enum btree_id id, unsigned version,
unsigned big_endian, int write,
struct bkey_s);
@@ -57,6 +62,28 @@ static inline bool bch2_bkey_maybe_mergable(const struct bkey *l, const struct b
bool bch2_bkey_merge(struct bch_fs *, struct bkey_s, struct bkey_s_c);
+static inline int bch2_mark_key(struct btree_trans *trans,
+ struct bkey_s_c old,
+ struct bkey_s_c new,
+ unsigned flags)
+{
+ const struct bkey_ops *ops = &bch2_bkey_ops[old.k->type ?: new.k->type];
+
+ return ops->atomic_trigger
+ ? ops->atomic_trigger(trans, old, new, flags)
+ : 0;
+}
+
+static inline int bch2_trans_mark_key(struct btree_trans *trans, struct bkey_s_c old,
+ struct bkey_i *new, unsigned flags)
+{
+ const struct bkey_ops *ops = &bch2_bkey_ops[old.k->type ?: new->k.type];
+
+ return ops->trans_trigger
+ ? ops->trans_trigger(trans, old, new, flags)
+ : 0;
+}
+
void bch2_bkey_renumber(enum btree_node_type, struct bkey_packed *, int);
void __bch2_bkey_compat(unsigned, enum btree_id, unsigned, unsigned,