From: Kent Overstreet Date: Mon, 10 Jan 2022 01:52:10 +0000 (-0500) Subject: bcachefs: Handle transaction restarts in __bch2_move_data() X-Git-Tag: io_uring-6.7-2023-11-10~119^2~1172 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=8ede99101ec354053ac755419df9da5434a13733;p=linux-block.git bcachefs: Handle transaction restarts in __bch2_move_data() We weren't checking for -EINTR in the main loop in __bch2_move_data - this code predates modern transaction restarts. Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/move.c b/fs/bcachefs/move.c index 8756df0414a8..f428e2ff99f6 100644 --- a/fs/bcachefs/move.c +++ b/fs/bcachefs/move.c @@ -701,17 +701,20 @@ static int __bch2_move_data(struct bch_fs *c, bch2_trans_begin(&trans); k = bch2_btree_iter_peek(&iter); - - stats->pos = iter.pos; - if (!k.k) break; + ret = bkey_err(k); + if (ret == -EINTR) + continue; if (ret) break; + if (bkey_cmp(bkey_start_pos(k.k), end) >= 0) break; + stats->pos = iter.pos; + if (!bkey_extent_is_direct_data(k.k)) goto next_nondata; @@ -754,10 +757,8 @@ static int __bch2_move_data(struct bch_fs *c, ret2 = bch2_move_extent(&trans, ctxt, wp, io_opts, btree_id, k, data_cmd, data_opts); if (ret2) { - if (ret2 == -EINTR) { - bch2_trans_begin(&trans); + if (ret2 == -EINTR) continue; - } if (ret2 == -ENOMEM) { /* memory allocation failure, wait for some IO to finish */