]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/reflink.c
Update bcachefs sources to b964c6cba8 bcachefs: Change lockrestart_do() to always...
[bcachefs-tools-debian] / libbcachefs / reflink.c
index ebf391245470f2b2e49a528ade8c1715791f861d..3d9c5c5b0eba75a7e548e6b1e48f539bddbf4365 100644 (file)
@@ -192,8 +192,9 @@ static struct bkey_s_c get_next_src(struct btree_iter *iter, struct bpos end)
                        return k;
        }
 
-       bch2_btree_iter_set_pos(iter, end);
-       return bkey_s_c_null;
+       if (bkey_cmp(iter->pos, end) >= 0)
+               bch2_btree_iter_set_pos(iter, end);
+       return ret ? bkey_s_c_err(ret) : bkey_s_c_null;
 }
 
 s64 bch2_remap_range(struct bch_fs *c,
@@ -304,12 +305,12 @@ s64 bch2_remap_range(struct bch_fs *c,
        dst_done = dst_iter->pos.offset - dst_start.offset;
        new_i_size = min(dst_iter->pos.offset << 9, new_i_size);
 
-       bch2_trans_begin(&trans);
-
        do {
                struct bch_inode_unpacked inode_u;
                struct btree_iter *inode_iter;
 
+               bch2_trans_begin(&trans);
+
                inode_iter = bch2_inode_peek(&trans, &inode_u,
                                dst_start.inode, BTREE_ITER_INTENT);
                ret2 = PTR_ERR_OR_ZERO(inode_iter);