]> www.infradead.org Git - nvme.git/commitdiff
bcachefs: No need to clone iterators for update
authorKent Overstreet <kent.overstreet@gmail.com>
Mon, 6 Sep 2021 19:38:12 +0000 (15:38 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:11 +0000 (17:09 -0400)
Since btree_path is now internally refcounted, we don't need to clone an
iterator before calling bch2_trans_update() if we'll be mutating it.

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

index dfa1086e5247a1a7fb50b62cfa13858d0b4b7180..310442fcc37f766a32937e92b227e3b288dd7dab 100644 (file)
@@ -875,12 +875,7 @@ static noinline int extent_front_merge(struct btree_trans *trans,
        bkey_reassemble(update, k);
 
        if (bch2_bkey_merge(c, bkey_i_to_s(update), bkey_i_to_s_c(*insert))) {
-               struct btree_iter update_iter;
-
-               bch2_trans_copy_iter(&update_iter, iter);
-               ret = bch2_btree_delete_at(trans, &update_iter, flags);
-               bch2_trans_iter_exit(trans, &update_iter);
-
+               ret = bch2_btree_delete_at(trans, iter, flags);
                if (ret)
                        return ret;
 
@@ -959,10 +954,7 @@ static int bch2_trans_update_extent(struct btree_trans *trans,
                }
 
                if (bkey_cmp(k.k->p, insert->k.p) <= 0) {
-                       bch2_trans_copy_iter(&update_iter, &iter);
-                       ret = bch2_btree_delete_at(trans, &update_iter, flags);
-                       bch2_trans_iter_exit(trans, &update_iter);
-
+                       ret = bch2_btree_delete_at(trans, &iter, flags);
                        if (ret)
                                goto err;
                }
@@ -975,9 +967,10 @@ static int bch2_trans_update_extent(struct btree_trans *trans,
                        bkey_reassemble(update, k);
                        bch2_cut_front(insert->k.p, update);
 
-                       bch2_trans_copy_iter(&update_iter, &iter);
-                       bch2_trans_update(trans, &update_iter, update, flags);
-                       bch2_trans_iter_exit(trans, &update_iter);
+                       ret = bch2_trans_update(trans, &iter, update, flags);
+                       if (ret)
+                               goto err;
+
                        goto out;
                }
 next:
@@ -1081,8 +1074,7 @@ int __bch2_btree_insert(struct btree_trans *trans,
        int ret;
 
        bch2_trans_iter_init(trans, &iter, id, bkey_start_pos(&k->k),
-                                  BTREE_ITER_INTENT);
-
+                            BTREE_ITER_INTENT);
        ret   = bch2_btree_iter_traverse(&iter) ?:
                bch2_trans_update(trans, &iter, k, 0);
        bch2_trans_iter_exit(trans, &iter);