]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/backpointers.c
Update bcachefs sources to feaca6edbd24 mean and variance: Promote to lib/math
[bcachefs-tools-debian] / libbcachefs / backpointers.c
index 4c8bcf23bb27194875191f0214a583b2340de3db..8c66333bcf272127400c4b7f8581c787b851d021 100644 (file)
@@ -136,15 +136,30 @@ static noinline int backpointer_mod_err(struct btree_trans *trans,
 }
 
 int bch2_bucket_backpointer_mod_nowritebuffer(struct btree_trans *trans,
-                               struct bkey_i_backpointer *bp_k,
+                               struct bpos bucket,
                                struct bch_backpointer bp,
                                struct bkey_s_c orig_k,
                                bool insert)
 {
        struct btree_iter bp_iter;
        struct bkey_s_c k;
+       struct bkey_i_backpointer *bp_k;
        int ret;
 
+       bp_k = bch2_trans_kmalloc_nomemzero(trans, sizeof(struct bkey_i_backpointer));
+       ret = PTR_ERR_OR_ZERO(bp_k);
+       if (ret)
+               return ret;
+
+       bkey_backpointer_init(&bp_k->k_i);
+       bp_k->k.p = bucket_pos_to_bp(trans->c, bucket, bp.bucket_offset);
+       bp_k->v = bp;
+
+       if (!insert) {
+               bp_k->k.type = KEY_TYPE_deleted;
+               set_bkey_val_u64s(&bp_k->k, 0);
+       }
+
        k = bch2_bkey_get_iter(trans, &bp_iter, BTREE_ID_backpointers,
                               bp_k->k.p,
                               BTREE_ITER_INTENT|