From: Kent Overstreet Date: Mon, 6 Sep 2021 19:38:12 +0000 (-0400) Subject: bcachefs: No need to clone iterators for update X-Git-Tag: v6.7-rc1~201^2~1401 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=cf3c68cda684b41bcdd4d9a8dba4abd4abb32881;p=thirdparty%2Flinux.git bcachefs: No need to clone iterators for update 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 --- diff --git a/fs/bcachefs/btree_update_leaf.c b/fs/bcachefs/btree_update_leaf.c index dfa1086e5247a..310442fcc37f7 100644 --- a/fs/bcachefs/btree_update_leaf.c +++ b/fs/bcachefs/btree_update_leaf.c @@ -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);