summaryrefslogtreecommitdiff
path: root/libbcachefs/bkey_methods.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2021-06-10 20:21:18 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2021-06-10 20:25:55 -0400
commitff578c6718bb6bbeb8f33f2f52ebfb4b4b28edc7 (patch)
treea7fb0b5b164387f889b60ba561c93a4a8f3b6650 /libbcachefs/bkey_methods.c
parent58ae103b0a2b5d881d6e8ff68fe17bb822148ce7 (diff)
Update bcachefs sources to 69be0dae31 bcachefs: Always zero memory from bch2_trans_kmalloc()
Diffstat (limited to 'libbcachefs/bkey_methods.c')
-rw-r--r--libbcachefs/bkey_methods.c19
1 files changed, 3 insertions, 16 deletions
diff --git a/libbcachefs/bkey_methods.c b/libbcachefs/bkey_methods.c
index 9f869bed..09e5dbf1 100644
--- a/libbcachefs/bkey_methods.c
+++ b/libbcachefs/bkey_methods.c
@@ -84,7 +84,7 @@ 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 struct bkey_ops bch2_bkey_ops[] = {
+const struct bkey_ops bch2_bkey_ops[] = {
#define x(name, nr) [KEY_TYPE_##name] = bch2_bkey_ops_##name,
BCH_BKEY_TYPES()
#undef x
@@ -290,24 +290,11 @@ bool bch2_bkey_normalize(struct bch_fs *c, struct bkey_s k)
: false;
}
-enum merge_result bch2_bkey_merge(struct bch_fs *c,
- struct bkey_s l, struct bkey_s r)
+bool bch2_bkey_merge(struct bch_fs *c, struct bkey_s l, struct bkey_s_c r)
{
const struct bkey_ops *ops = &bch2_bkey_ops[l.k->type];
- enum merge_result ret;
- if (bch2_key_merging_disabled ||
- !ops->key_merge ||
- l.k->type != r.k->type ||
- bversion_cmp(l.k->version, r.k->version) ||
- bpos_cmp(l.k->p, bkey_start_pos(r.k)))
- return BCH_MERGE_NOMERGE;
-
- ret = ops->key_merge(c, l, r);
-
- if (ret != BCH_MERGE_NOMERGE)
- l.k->needs_whiteout |= r.k->needs_whiteout;
- return ret;
+ return bch2_bkey_maybe_mergable(l.k, r.k) && ops->key_merge(c, l, r);
}
static const struct old_bkey_type {