bcachefs: Use bch2_trans_begin() more consistently
authorKent Overstreet <kent.overstreet@gmail.com>
Sun, 25 Jul 2021 00:24:10 +0000 (20:24 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:09 +0000 (17:09 -0400)
Upcoming patch will require that a transaction restart is always
immediately followed by bch2_trans_begin().

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
fs/bcachefs/btree_update.h
fs/bcachefs/fs-io.c
fs/bcachefs/fs.c
fs/bcachefs/io.c
fs/bcachefs/move.c
fs/bcachefs/reflink.c

index bab135fae0b0bbd9225c308eb5b9fda8868a70c4..b5f35a4190045dac3c0cc7e07d51a84d29f36a0c 100644 (file)
@@ -114,7 +114,7 @@ static inline int bch2_trans_commit(struct btree_trans *trans,
                _ret = (_do);                                           \
                if (_ret != -EINTR)                                     \
                        break;                                          \
-               bch2_trans_reset(_trans, 0);                            \
+               bch2_trans_begin(_trans);                               \
        }                                                               \
                                                                        \
        _ret;                                                           \
index 1a06f77101ab8b2139a4d6d7a4ebbae528e60634..30e5acd2e97c4ca6ab71618e3ae91935b19cd5e2 100644 (file)
@@ -784,6 +784,8 @@ static void bchfs_read(struct btree_trans *trans, struct btree_iter *iter,
 
        bch2_bkey_buf_init(&sk);
 retry:
+       bch2_trans_begin(trans);
+
        while (1) {
                struct bkey_s_c k;
                unsigned bytes, sectors, offset_into_extent;
@@ -2541,6 +2543,8 @@ static long bchfs_fcollapse_finsert(struct bch_inode_info *inode,
                struct bpos atomic_end;
                unsigned trigger_flags = 0;
 
+               bch2_trans_begin(&trans);
+
                k = insert
                        ? bch2_btree_iter_peek_prev(src)
                        : bch2_btree_iter_peek(src);
index 71e738b9896725dd4132bdd89b95488fa62570af..b2d6e80bbb78f7ebff13d5919c76bf6eb5e8a825 100644 (file)
@@ -911,6 +911,8 @@ static int bch2_fiemap(struct inode *vinode, struct fiemap_extent_info *info,
        iter = bch2_trans_get_iter(&trans, BTREE_ID_extents,
                                   POS(ei->v.i_ino, start >> 9), 0);
 retry:
+       bch2_trans_begin(&trans);
+
        while ((k = bch2_btree_iter_peek(iter)).k &&
               !(ret = bkey_err(k)) &&
               bkey_cmp(iter->pos, end) < 0) {
index 5ff8fea80fbaf2fb77be6a4c661955d7f426972a..f293876e0bbc00032bf26385d1e7dc19b31b8f4e 100644 (file)
@@ -376,14 +376,13 @@ int bch2_fpunch_at(struct btree_trans *trans, struct btree_iter *iter,
        struct bkey_s_c k;
        int ret = 0, ret2 = 0;
 
-       while ((k = bch2_btree_iter_peek(iter)).k &&
+       while ((bch2_trans_begin(trans),
+               (k = bch2_btree_iter_peek(iter)).k) &&
               bkey_cmp(iter->pos, end) < 0) {
                struct disk_reservation disk_res =
                        bch2_disk_reservation_init(c, 0);
                struct bkey_i delete;
 
-               bch2_trans_begin(trans);
-
                ret = bkey_err(k);
                if (ret)
                        goto btree_err;
@@ -2278,12 +2277,13 @@ void __bch2_read(struct bch_fs *c, struct bch_read_bio *rbio,
 
        bch2_bkey_buf_init(&sk);
        bch2_trans_init(&trans, c, 0, 0);
-retry:
-       bch2_trans_begin(&trans);
 
        iter = bch2_trans_get_iter(&trans, BTREE_ID_extents,
                                   POS(inode, bvec_iter.bi_sector),
                                   BTREE_ITER_SLOTS);
+retry:
+       bch2_trans_begin(&trans);
+
        while (1) {
                unsigned bytes, sectors, offset_into_extent;
                enum btree_id data_btree = BTREE_ID_extents;
@@ -2339,19 +2339,20 @@ retry:
                swap(bvec_iter.bi_size, bytes);
                bio_advance_iter(&rbio->bio, &bvec_iter, bytes);
        }
-       bch2_trans_iter_put(&trans, iter);
 
        if (ret == -EINTR || ret == READ_RETRY || ret == READ_RETRY_AVOID)
                goto retry;
 
+       bch2_trans_iter_put(&trans, iter);
+       bch2_trans_exit(&trans);
+       bch2_bkey_buf_exit(&sk, c);
+
        if (ret) {
                bch_err_inum_ratelimited(c, inode,
                                         "read error %i from btree lookup", ret);
                rbio->bio.bi_status = BLK_STS_IOERR;
                bch2_rbio_done(rbio);
        }
-       bch2_trans_exit(&trans);
-       bch2_bkey_buf_exit(&sk, c);
 }
 
 void bch2_fs_io_exit(struct bch_fs *c)
index 7dea6637ae58ecc058174a031ca2830580350892..9a423a3e4570d83bf22d291df207a6d202a821d6 100644 (file)
@@ -83,7 +83,7 @@ int bch2_migrate_index_update(struct bch_write_op *op)
                bool extending = false, should_check_enospc;
                s64 i_sectors_delta = 0, disk_sectors_delta = 0;
 
-               bch2_trans_reset(&trans, 0);
+               bch2_trans_begin(&trans);
 
                k = bch2_btree_iter_peek_slot(iter);
                ret = bkey_err(k);
@@ -597,6 +597,8 @@ static int __bch2_move_data(struct bch_fs *c,
                        }
                } while (delay);
 
+               bch2_trans_begin(&trans);
+
                k = bch2_btree_iter_peek(iter);
 
                stats->pos = iter->pos;
@@ -652,8 +654,7 @@ static int __bch2_move_data(struct bch_fs *c,
                                        data_cmd, data_opts);
                if (ret2) {
                        if (ret2 == -EINTR) {
-                               bch2_trans_reset(&trans, 0);
-                               bch2_trans_cond_resched(&trans);
+                               bch2_trans_begin(&trans);
                                continue;
                        }
 
index 8b168246ca38555ac0fcd26e06b8d8743404dcf4..3d9c5c5b0eba75a7e548e6b1e48f539bddbf4365 100644 (file)
@@ -305,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);