Commit b89726ab authored by Kent Overstreet's avatar Kent Overstreet Committed by Kent Overstreet

bcachefs: Kill __btree_delete_at()

With trans->updates2 gone, we can now drop this helper and use
bch2_btree_delete_at() instead.
Signed-off-by: default avatarKent Overstreet <kent.overstreet@gmail.com>
parent 8ee529e9
...@@ -771,34 +771,12 @@ bch2_trans_commit_get_rw_cold(struct btree_trans *trans) ...@@ -771,34 +771,12 @@ bch2_trans_commit_get_rw_cold(struct btree_trans *trans)
return 0; return 0;
} }
static int __btree_delete_at(struct btree_trans *trans, enum btree_id btree_id,
struct bpos pos, unsigned trigger_flags)
{
struct btree_iter *iter;
struct bkey_i *update;
int ret;
update = bch2_trans_kmalloc(trans, sizeof(struct bkey));
if ((ret = PTR_ERR_OR_ZERO(update)))
return ret;
bkey_init(&update->k);
update->k.p = pos;
iter = bch2_trans_get_iter(trans, btree_id, pos,
BTREE_ITER_NOT_EXTENTS|
BTREE_ITER_INTENT);
bch2_trans_update(trans, iter, update, trigger_flags);
bch2_trans_iter_put(trans, iter);
return 0;
}
static noinline int extent_front_merge(struct btree_trans *trans, static noinline int extent_front_merge(struct btree_trans *trans,
struct btree_iter *iter,
struct bkey_s_c k, struct bkey_s_c k,
struct btree_insert_entry *i) struct btree_insert_entry *i)
{ {
struct bch_fs *c = trans->c; struct bch_fs *c = trans->c;
struct bpos l_pos = k.k->p;
struct bkey_i *update; struct bkey_i *update;
int ret; int ret;
...@@ -810,8 +788,13 @@ static noinline int extent_front_merge(struct btree_trans *trans, ...@@ -810,8 +788,13 @@ static noinline int extent_front_merge(struct btree_trans *trans,
bkey_reassemble(update, k); bkey_reassemble(update, k);
if (bch2_bkey_merge(c, bkey_i_to_s(update), bkey_i_to_s_c(i->k))) { if (bch2_bkey_merge(c, bkey_i_to_s(update), bkey_i_to_s_c(i->k))) {
ret = __btree_delete_at(trans, i->btree_id, l_pos, struct btree_iter *update_iter =
i->trigger_flags); bch2_trans_copy_iter(trans, iter);
ret = bch2_btree_delete_at(trans, update_iter,
i->trigger_flags);
bch2_trans_iter_put(trans, update_iter);
if (ret) if (ret)
return ret; return ret;
...@@ -841,7 +824,7 @@ static int extent_handle_overwrites(struct btree_trans *trans, ...@@ -841,7 +824,7 @@ static int extent_handle_overwrites(struct btree_trans *trans,
if (!bkey_cmp(k.k->p, bkey_start_pos(&i->k->k))) { if (!bkey_cmp(k.k->p, bkey_start_pos(&i->k->k))) {
if (bch2_bkey_maybe_mergable(k.k, &i->k->k)) { if (bch2_bkey_maybe_mergable(k.k, &i->k->k)) {
ret = extent_front_merge(trans, k, i); ret = extent_front_merge(trans, iter, k, i);
if (ret) if (ret)
goto out; goto out;
} }
...@@ -877,8 +860,11 @@ static int extent_handle_overwrites(struct btree_trans *trans, ...@@ -877,8 +860,11 @@ static int extent_handle_overwrites(struct btree_trans *trans,
} }
if (bkey_cmp(k.k->p, i->k->k.p) <= 0) { if (bkey_cmp(k.k->p, i->k->k.p) <= 0) {
ret = __btree_delete_at(trans, i->btree_id, k.k->p, update_iter = bch2_trans_copy_iter(trans, iter);
i->trigger_flags); ret = bch2_btree_delete_at(trans, update_iter,
i->trigger_flags);
bch2_trans_iter_put(trans, update_iter);
if (ret) if (ret)
goto out; goto out;
} }
...@@ -891,12 +877,7 @@ static int extent_handle_overwrites(struct btree_trans *trans, ...@@ -891,12 +877,7 @@ static int extent_handle_overwrites(struct btree_trans *trans,
bkey_reassemble(update, k); bkey_reassemble(update, k);
bch2_cut_front(i->k->k.p, update); bch2_cut_front(i->k->k.p, update);
update_iter = bch2_trans_get_iter(trans, i->btree_id, update->k.p, bch2_trans_update(trans, iter, update, i->trigger_flags);
BTREE_ITER_NOT_EXTENTS|
BTREE_ITER_INTENT);
bch2_trans_update(trans, update_iter, update,
i->trigger_flags);
bch2_trans_iter_put(trans, update_iter);
goto out; goto out;
} }
next: next:
...@@ -1143,16 +1124,17 @@ int bch2_btree_insert(struct bch_fs *c, enum btree_id id, ...@@ -1143,16 +1124,17 @@ int bch2_btree_insert(struct bch_fs *c, enum btree_id id,
} }
int bch2_btree_delete_at(struct btree_trans *trans, int bch2_btree_delete_at(struct btree_trans *trans,
struct btree_iter *iter, unsigned flags) struct btree_iter *iter, unsigned trigger_flags)
{ {
struct bkey_i k; struct bkey_i *k;
bkey_init(&k.k); k = bch2_trans_kmalloc(trans, sizeof(*k));
k.k.p = iter->pos; if (IS_ERR(k))
return PTR_ERR(k);
return bch2_trans_update(trans, iter, &k, 0) ?: bkey_init(&k->k);
bch2_trans_commit(trans, NULL, NULL, k->k.p = iter->pos;
BTREE_INSERT_NOFAIL|flags); return bch2_trans_update(trans, iter, k, trigger_flags);
} }
int bch2_btree_delete_range_trans(struct btree_trans *trans, enum btree_id id, int bch2_btree_delete_range_trans(struct btree_trans *trans, enum btree_id id,
......
...@@ -761,7 +761,7 @@ static int check_dirents(struct bch_fs *c) ...@@ -761,7 +761,7 @@ static int check_dirents(struct bch_fs *c)
mode_to_type(w.inode.bi_mode), mode_to_type(w.inode.bi_mode),
(bch2_bkey_val_to_text(&PBUF(buf), c, (bch2_bkey_val_to_text(&PBUF(buf), c,
k), buf))) { k), buf))) {
ret = lockrestart_do(&trans, ret = __bch2_trans_do(&trans, NULL, NULL, 0,
bch2_btree_delete_at(&trans, iter, 0)); bch2_btree_delete_at(&trans, iter, 0));
if (ret) if (ret)
goto err; goto err;
......
...@@ -54,14 +54,16 @@ static int test_delete(struct bch_fs *c, u64 nr) ...@@ -54,14 +54,16 @@ static int test_delete(struct bch_fs *c, u64 nr)
} }
pr_info("deleting once"); pr_info("deleting once");
ret = bch2_btree_delete_at(&trans, iter, 0); ret = __bch2_trans_do(&trans, NULL, NULL, 0,
bch2_btree_delete_at(&trans, iter, 0));
if (ret) { if (ret) {
bch_err(c, "delete error (first) in test_delete: %i", ret); bch_err(c, "delete error (first) in test_delete: %i", ret);
goto err; goto err;
} }
pr_info("deleting twice"); pr_info("deleting twice");
ret = bch2_btree_delete_at(&trans, iter, 0); ret = __bch2_trans_do(&trans, NULL, NULL, 0,
bch2_btree_delete_at(&trans, iter, 0));
if (ret) { if (ret) {
bch_err(c, "delete error (second) in test_delete: %i", ret); bch_err(c, "delete error (second) in test_delete: %i", ret);
goto err; goto err;
...@@ -101,7 +103,8 @@ static int test_delete_written(struct bch_fs *c, u64 nr) ...@@ -101,7 +103,8 @@ static int test_delete_written(struct bch_fs *c, u64 nr)
bch2_journal_flush_all_pins(&c->journal); bch2_journal_flush_all_pins(&c->journal);
ret = bch2_btree_delete_at(&trans, iter, 0); ret = __bch2_trans_do(&trans, NULL, NULL, 0,
bch2_btree_delete_at(&trans, iter, 0));
if (ret) { if (ret) {
bch_err(c, "delete error in test_delete_written: %i", ret); bch_err(c, "delete error in test_delete_written: %i", ret);
goto err; goto err;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment