summaryrefslogtreecommitdiff
path: root/fs/bcachefs/btree_update.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/bcachefs/btree_update.c')
-rw-r--r--fs/bcachefs/btree_update.c45
1 files changed, 5 insertions, 40 deletions
diff --git a/fs/bcachefs/btree_update.c b/fs/bcachefs/btree_update.c
index ff7b53c6b0fb..f514a8ad7a89 100644
--- a/fs/bcachefs/btree_update.c
+++ b/fs/bcachefs/btree_update.c
@@ -164,19 +164,6 @@ int __bch2_insert_snapshot_whiteouts(struct btree_trans *trans,
return ret;
}
-static inline enum bch_bkey_type extent_whiteout_type(enum btree_id btree, const struct bkey *k)
-{
- /*
- * KEY_TYPE_extent_whiteout indicates that there isn't a real extent
- * present at that position: key start positions inclusive of
- * KEY_TYPE_extent_whiteout (but not KEY_TYPE_whiteout) are
- * monotonically increasing
- */
- return btree_id_is_extents_snapshots(btree) && bkey_deleted(k)
- ? KEY_TYPE_extent_whiteout
- : KEY_TYPE_whiteout;
-}
-
int bch2_trans_update_extent_overwrite(struct btree_trans *trans,
struct btree_iter *iter,
enum btree_iter_update_trigger_flags flags,
@@ -244,13 +231,13 @@ int bch2_trans_update_extent_overwrite(struct btree_trans *trans,
update->k.p.snapshot = new.k->p.snapshot;
if (new.k->p.snapshot != old.k->p.snapshot) {
- update->k.type = extent_whiteout_type(iter->btree_id, new.k);
+ update->k.type = KEY_TYPE_whiteout;
} else if (btree_type_has_snapshots(btree_id)) {
ret = need_whiteout_for_snapshot(trans, btree_id, update->k.p);
if (ret < 0)
return ret;
if (ret)
- update->k.type = extent_whiteout_type(iter->btree_id, new.k);
+ update->k.type = KEY_TYPE_whiteout;
}
ret = bch2_btree_insert_nonextent(trans, btree_id, update,
@@ -289,8 +276,7 @@ static int bch2_trans_update_extent(struct btree_trans *trans,
bch2_trans_iter_init(trans, &iter, btree_id, bkey_start_pos(&insert->k),
BTREE_ITER_intent|
BTREE_ITER_with_updates|
- BTREE_ITER_not_extents|
- BTREE_ITER_nofilter_whiteouts);
+ BTREE_ITER_not_extents);
k = bch2_btree_iter_peek_max(trans, &iter, POS(insert->k.p.inode, U64_MAX));
if ((ret = bkey_err(k)))
goto err;
@@ -307,28 +293,7 @@ static int bch2_trans_update_extent(struct btree_trans *trans,
goto next;
}
- while (true) {
- if (k.k->type == KEY_TYPE_whiteout &&
- bkey_lt(insert->k.p, k.k->p))
- continue;
-
- if (bkey_le(insert->k.p, bkey_start_pos(k.k)))
- break;
-
- if (bkey_extent_whiteout(k.k)) {
- enum bch_bkey_type whiteout_type = extent_whiteout_type(btree_id, &insert->k);
- if (k.k->type != whiteout_type) {
- struct bkey_i *update = bch2_bkey_make_mut(trans, &iter, &k, 0);
- ret = PTR_ERR_OR_ZERO(update);
- if (ret)
- goto err;
-
- update->k.type = whiteout_type;
- }
-
- goto next;
- }
-
+ while (bkey_gt(insert->k.p, bkey_start_pos(k.k))) {
bool done = bkey_lt(insert->k.p, k.k->p);
ret = bch2_trans_update_extent_overwrite(trans, &iter, flags, k, bkey_i_to_s_c(insert));
@@ -560,7 +525,7 @@ int __must_check bch2_trans_update_ip(struct btree_trans *trans, struct btree_it
return ret;
if (ret)
- k->k.type = extent_whiteout_type(iter->btree_id, &k->k);
+ k->k.type = KEY_TYPE_whiteout;
}
/*