From 0397a2e8e1778ce5c8fe893e0b0377d11d57cc5f Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Sun, 7 Nov 2021 12:10:57 -0500 Subject: [PATCH] bcachefs: Refactor bch2_fpunch_at() This cleans up the error hanlding and flow control a bit. Signed-off-by: Kent Overstreet --- fs/bcachefs/io.c | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/fs/bcachefs/io.c b/fs/bcachefs/io.c index dc41286c229e6..3acd357919a2a 100644 --- a/fs/bcachefs/io.c +++ b/fs/bcachefs/io.c @@ -402,26 +402,31 @@ int bch2_fpunch_at(struct btree_trans *trans, struct btree_iter *iter, int ret = 0, ret2 = 0; u32 snapshot; - while (1) { + while (!ret || ret == -EINTR) { struct disk_reservation disk_res = bch2_disk_reservation_init(c, 0); struct bkey_i delete; + if (ret) + ret2 = ret; + bch2_trans_begin(trans); ret = bch2_subvolume_get_snapshot(trans, inum.subvol, &snapshot); if (ret) - goto btree_err; + continue; bch2_btree_iter_set_snapshot(iter, snapshot); k = bch2_btree_iter_peek(iter); - if (bkey_cmp(iter->pos, end_pos) >= 0) + if (bkey_cmp(iter->pos, end_pos) >= 0) { + bch2_btree_iter_set_pos(iter, end_pos); break; + } ret = bkey_err(k); if (ret) - goto btree_err; + continue; bkey_init(&delete.k); delete.k.p = iter->pos; @@ -434,18 +439,8 @@ int bch2_fpunch_at(struct btree_trans *trans, struct btree_iter *iter, &disk_res, NULL, 0, i_sectors_delta, false); bch2_disk_reservation_put(c, &disk_res); -btree_err: - if (ret == -EINTR) { - ret2 = ret; - ret = 0; - } - if (ret) - break; } - if (bkey_cmp(iter->pos, end_pos) > 0) - bch2_btree_iter_set_pos(iter, end_pos); - return ret ?: ret2; } -- 2.30.2