summaryrefslogtreecommitdiff
path: root/fs/bcachefs/recovery.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2019-08-16 09:58:07 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-22 17:08:25 -0400
commit3c7f3b7aeb73f2155aec9d00567b70ef55ede465 (patch)
treeb15d0dd40a4213018b9d6c3f9c4fb38fd5f5ff97 /fs/bcachefs/recovery.c
parent63069bb6bf03ac7a55c53886a1380899df3a176d (diff)
downloadlwn-3c7f3b7aeb73f2155aec9d00567b70ef55ede465.tar.gz
lwn-3c7f3b7aeb73f2155aec9d00567b70ef55ede465.zip
bcachefs: Refactor bch2_extent_trim_atomic() for reflink
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/recovery.c')
-rw-r--r--fs/bcachefs/recovery.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/fs/bcachefs/recovery.c b/fs/bcachefs/recovery.c
index a7fc3fe4284a..3742b241807c 100644
--- a/fs/bcachefs/recovery.c
+++ b/fs/bcachefs/recovery.c
@@ -247,6 +247,7 @@ static int bch2_extent_replay_key(struct bch_fs *c, struct bkey_i *k)
struct disk_reservation disk_res =
bch2_disk_reservation_init(c, 0);
struct bkey_i *split;
+ struct bpos atomic_end;
bool split_compressed = false;
int ret;
@@ -273,9 +274,14 @@ retry:
if (ret)
goto err;
+ ret = bch2_extent_atomic_end(&trans, split_iter,
+ k, &atomic_end);
+ if (ret)
+ goto err;
+
if (!split_compressed &&
bch2_extent_is_compressed(bkey_i_to_s_c(k)) &&
- !bch2_extent_is_atomic(k, split_iter)) {
+ bkey_cmp(atomic_end, k->k.p) < 0) {
ret = bch2_disk_reservation_add(c, &disk_res,
k->k.size *
bch2_bkey_nr_dirty_ptrs(bkey_i_to_s_c(k)),
@@ -287,7 +293,7 @@ retry:
bkey_copy(split, k);
bch2_cut_front(split_iter->pos, split);
- bch2_extent_trim_atomic(split, split_iter);
+ bch2_cut_back(atomic_end, &split->k);
bch2_trans_update(&trans, BTREE_INSERT_ENTRY(split_iter, split));
bch2_btree_iter_set_pos(iter, split->k.p);