diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2019-08-16 09:58:07 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 17:08:25 -0400 |
commit | 3c7f3b7aeb73f2155aec9d00567b70ef55ede465 (patch) | |
tree | b15d0dd40a4213018b9d6c3f9c4fb38fd5f5ff97 /fs/bcachefs/recovery.c | |
parent | 63069bb6bf03ac7a55c53886a1380899df3a176d (diff) | |
download | lwn-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.c | 10 |
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); |