summaryrefslogtreecommitdiff
path: root/fs/bcachefs
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2021-06-14 23:35:03 +0300
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-23 00:09:06 +0300
commitb89726ab86aab15ea8526fb365da6a0f5d474241 (patch)
tree8e9bbbeb6ab085e431817f60cc3776658e499a91 /fs/bcachefs
parent8ee529e9c16b9c72293794f441270e954a9c6508 (diff)
downloadlinux-b89726ab86aab15ea8526fb365da6a0f5d474241.tar.xz
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: Kent Overstreet <kent.overstreet@gmail.com>
Diffstat (limited to 'fs/bcachefs')
-rw-r--r--fs/bcachefs/btree_update_leaf.c64
-rw-r--r--fs/bcachefs/fsck.c2
-rw-r--r--fs/bcachefs/tests.c9
3 files changed, 30 insertions, 45 deletions
diff --git a/fs/bcachefs/btree_update_leaf.c b/fs/bcachefs/btree_update_leaf.c
index 852d4e39199f..634e25e94425 100644
--- a/fs/bcachefs/btree_update_leaf.c
+++ b/fs/bcachefs/btree_update_leaf.c
@@ -771,34 +771,12 @@ bch2_trans_commit_get_rw_cold(struct btree_trans *trans)
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,
+ struct btree_iter *iter,
struct bkey_s_c k,
struct btree_insert_entry *i)
{
struct bch_fs *c = trans->c;
- struct bpos l_pos = k.k->p;
struct bkey_i *update;
int ret;
@@ -810,8 +788,13 @@ 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(i->k))) {
- ret = __btree_delete_at(trans, i->btree_id, l_pos,
- i->trigger_flags);
+ struct btree_iter *update_iter =
+ 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)
return ret;
@@ -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 (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)
goto out;
}
@@ -877,8 +860,11 @@ static int extent_handle_overwrites(struct btree_trans *trans,
}
if (bkey_cmp(k.k->p, i->k->k.p) <= 0) {
- ret = __btree_delete_at(trans, i->btree_id, k.k->p,
- i->trigger_flags);
+ update_iter = 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)
goto out;
}
@@ -891,12 +877,7 @@ static int extent_handle_overwrites(struct btree_trans *trans,
bkey_reassemble(update, k);
bch2_cut_front(i->k->k.p, update);
- update_iter = bch2_trans_get_iter(trans, i->btree_id, update->k.p,
- BTREE_ITER_NOT_EXTENTS|
- BTREE_ITER_INTENT);
- bch2_trans_update(trans, update_iter, update,
- i->trigger_flags);
- bch2_trans_iter_put(trans, update_iter);
+ bch2_trans_update(trans, iter, update, i->trigger_flags);
goto out;
}
next:
@@ -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,
- 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.k.p = iter->pos;
+ k = bch2_trans_kmalloc(trans, sizeof(*k));
+ if (IS_ERR(k))
+ return PTR_ERR(k);
- return bch2_trans_update(trans, iter, &k, 0) ?:
- bch2_trans_commit(trans, NULL, NULL,
- BTREE_INSERT_NOFAIL|flags);
+ bkey_init(&k->k);
+ k->k.p = iter->pos;
+ return bch2_trans_update(trans, iter, k, trigger_flags);
}
int bch2_btree_delete_range_trans(struct btree_trans *trans, enum btree_id id,
diff --git a/fs/bcachefs/fsck.c b/fs/bcachefs/fsck.c
index 89a130d9c537..1bb595f4003a 100644
--- a/fs/bcachefs/fsck.c
+++ b/fs/bcachefs/fsck.c
@@ -761,7 +761,7 @@ retry:
mode_to_type(w.inode.bi_mode),
(bch2_bkey_val_to_text(&PBUF(buf), c,
k), buf))) {
- ret = lockrestart_do(&trans,
+ ret = __bch2_trans_do(&trans, NULL, NULL, 0,
bch2_btree_delete_at(&trans, iter, 0));
if (ret)
goto err;
diff --git a/fs/bcachefs/tests.c b/fs/bcachefs/tests.c
index 87208da5e350..fa9f600fc17c 100644
--- a/fs/bcachefs/tests.c
+++ b/fs/bcachefs/tests.c
@@ -54,14 +54,16 @@ static int test_delete(struct bch_fs *c, u64 nr)
}
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) {
bch_err(c, "delete error (first) in test_delete: %i", ret);
goto err;
}
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) {
bch_err(c, "delete error (second) in test_delete: %i", ret);
goto err;
@@ -101,7 +103,8 @@ static int test_delete_written(struct bch_fs *c, u64 nr)
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) {
bch_err(c, "delete error in test_delete_written: %i", ret);
goto err;