bcachefs: Check for errors from bch2_trans_update()
authorKent Overstreet <kent.overstreet@gmail.com>
Wed, 2 Jun 2021 04:15:07 +0000 (00:15 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:05 +0000 (17:09 -0400)
Upcoming refactoring is going to change bch2_trans_update() to start
returning transaction restarts.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
13 files changed:
fs/bcachefs/acl.c
fs/bcachefs/alloc_background.c
fs/bcachefs/btree_gc.c
fs/bcachefs/btree_update_leaf.c
fs/bcachefs/buckets.c
fs/bcachefs/ec.c
fs/bcachefs/fsck.c
fs/bcachefs/inode.c
fs/bcachefs/io.c
fs/bcachefs/migrate.c
fs/bcachefs/move.c
fs/bcachefs/str_hash.h
fs/bcachefs/tests.c

index afb9562be2b2d38eda91a6dd74d44109fab25d83..be31d27443bcb5c44234517a35360dacea0b0d3a 100644 (file)
@@ -386,7 +386,7 @@ int bch2_acl_chmod(struct btree_trans *trans,
        }
 
        new->k.p = iter->pos;
-       bch2_trans_update(trans, iter, &new->k_i, 0);
+       ret = bch2_trans_update(trans, iter, &new->k_i, 0);
        *new_acl = acl;
        acl = NULL;
 err:
index b6bfba7aea0ab23b114cccb406098ca6e3356a2e..15f9adf0876a9fac3871b6541cd80c9a491461ee 100644 (file)
@@ -340,9 +340,9 @@ retry:
                return 0;
 
        bch2_alloc_pack(c, &a, new_u);
-       bch2_trans_update(trans, iter, &a.k,
-                         BTREE_TRIGGER_NORUN);
-       ret = bch2_trans_commit(trans, NULL, NULL,
+       ret   = bch2_trans_update(trans, iter, &a.k,
+                                 BTREE_TRIGGER_NORUN) ?:
+               bch2_trans_commit(trans, NULL, NULL,
                                BTREE_INSERT_NOFAIL|flags);
 err:
        if (ret == -EINTR)
@@ -726,7 +726,8 @@ static int bucket_invalidate_btree(struct btree_trans *trans,
        u.write_time    = atomic64_read(&c->io_clock[WRITE].now);
 
        bch2_alloc_pack(c, a, u);
-       bch2_trans_update(trans, iter, &a->k, BTREE_TRIGGER_BUCKET_INVALIDATE);
+       ret = bch2_trans_update(trans, iter, &a->k,
+                               BTREE_TRIGGER_BUCKET_INVALIDATE);
 err:
        bch2_trans_iter_put(trans, iter);
        return ret;
index 5a2acaba04c9c1c4b5da008f4fff52c7d27cb3d3..20830b2e007fcbc61303c52046bc13398a1b3623 100644 (file)
@@ -1668,9 +1668,10 @@ static int bch2_gc_btree_gens(struct bch_fs *c, enum btree_id btree_id)
                        bch2_bkey_buf_reassemble(&sk, c, k);
                        bch2_extent_normalize(c, bkey_i_to_s(sk.k));
 
-                       bch2_trans_update(&trans, iter, sk.k, 0);
 
-                       commit_err = bch2_trans_commit(&trans, NULL, NULL,
+                       commit_err =
+                               bch2_trans_update(&trans, iter, sk.k, 0) ?:
+                               bch2_trans_commit(&trans, NULL, NULL,
                                                       BTREE_INSERT_NOWAIT|
                                                       BTREE_INSERT_NOFAIL);
                        if (commit_err == -EINTR) {
index 3c4bf13d4ef9099816db1994b408e38fdf22cc73..839262c9501ada4cd23371bc06c4bccadfb54a4a 100644 (file)
@@ -1198,9 +1198,9 @@ int bch2_btree_delete_at(struct btree_trans *trans,
        bkey_init(&k.k);
        k.k.p = iter->pos;
 
-       bch2_trans_update(trans, iter, &k, 0);
-       return bch2_trans_commit(trans, NULL, NULL,
-                                BTREE_INSERT_NOFAIL|flags);
+       return  bch2_trans_update(trans, iter, &k, 0) ?:
+               bch2_trans_commit(trans, NULL, NULL,
+                                 BTREE_INSERT_NOFAIL|flags);
 }
 
 int bch2_btree_delete_range_trans(struct btree_trans *trans, enum btree_id id,
@@ -1251,8 +1251,8 @@ retry:
                                break;
                }
 
-               bch2_trans_update(trans, iter, &delete, 0);
-               ret = bch2_trans_commit(trans, NULL, journal_seq,
+               ret   = bch2_trans_update(trans, iter, &delete, 0) ?:
+                       bch2_trans_commit(trans, NULL, journal_seq,
                                        BTREE_INSERT_NOFAIL);
                if (ret)
                        break;
index ba6b1e770dcf06ba5af2ce7149e8ae216cfaff9e..c9e299706c745e58cbdd6c9fba471fddcffc5c06 100644 (file)
@@ -1877,7 +1877,9 @@ static int __bch2_trans_mark_reflink_p(struct btree_trans *trans,
        }
 
        bch2_btree_iter_set_pos(iter, bkey_start_pos(k.k));
-       bch2_trans_update(trans, iter, n, 0);
+       ret = bch2_trans_update(trans, iter, n, 0);
+       if (ret)
+               goto err;
 out:
        ret = sectors;
 err:
index 4fc774631d20c0bbe2d0f21264b13cadc1415b04..0ee8ecd9d8a0e2f3a3e5855da00254b5881f8c03 100644 (file)
@@ -741,9 +741,8 @@ found_slot:
 
        stripe->k.p = iter->pos;
 
-       bch2_trans_update(&trans, iter, &stripe->k_i, 0);
-
-       ret = bch2_trans_commit(&trans, res, NULL,
+       ret   = bch2_trans_update(&trans, iter, &stripe->k_i, 0) ?:
+               bch2_trans_commit(&trans, res, NULL,
                                BTREE_INSERT_NOFAIL);
 err:
        bch2_trans_iter_put(&trans, iter);
@@ -791,7 +790,7 @@ static int ec_stripe_bkey_update(struct btree_trans *trans,
                stripe_blockcount_set(&new->v, i,
                        stripe_blockcount_get(existing, i));
 
-       bch2_trans_update(trans, iter, &new->k_i, 0);
+       ret = bch2_trans_update(trans, iter, &new->k_i, 0);
 err:
        bch2_trans_iter_put(trans, iter);
        return ret;
@@ -864,9 +863,8 @@ static int ec_stripe_update_ptrs(struct bch_fs *c,
                extent_stripe_ptr_add(e, s, ec_ptr, block);
 
                bch2_btree_iter_set_pos(iter, bkey_start_pos(&sk.k->k));
-               bch2_trans_update(&trans, iter, sk.k, 0);
-
-               ret = bch2_trans_commit(&trans, NULL, NULL,
+               ret   = bch2_trans_update(&trans, iter, sk.k, 0) ?:
+                       bch2_trans_commit(&trans, NULL, NULL,
                                        BTREE_INSERT_NOFAIL);
                if (ret == -EINTR)
                        ret = 0;
@@ -1588,8 +1586,7 @@ write:
                stripe_blockcount_set(&new_key->v, i,
                                      m->block_sectors[i]);
 
-       bch2_trans_update(trans, iter, &new_key->k_i, 0);
-       return 0;
+       return bch2_trans_update(trans, iter, &new_key->k_i, 0);
 }
 
 int bch2_stripes_write(struct bch_fs *c, unsigned flags)
index a40459d2b0f06b369d1baae25aad6cd59d33485e..89a130d9c5373c5f668245a395b3226c8388073f 100644 (file)
@@ -305,9 +305,8 @@ static int hash_redo_key(struct btree_trans *trans,
 
        bkey_init(&delete->k);
        delete->k.p = k_iter->pos;
-       bch2_trans_update(trans, k_iter, delete, 0);
-
-       return bch2_hash_set(trans, desc, hash_info, k_iter->pos.inode, tmp, 0);
+       return  bch2_trans_update(trans, k_iter, delete, 0) ?:
+               bch2_hash_set(trans, desc, hash_info, k_iter->pos.inode, tmp, 0);
 }
 
 static int fsck_hash_delete_at(struct btree_trans *trans,
@@ -563,12 +562,12 @@ static int fix_overlapping_extent(struct btree_trans *trans,
                                   BTREE_ITER_INTENT|BTREE_ITER_NOT_EXTENTS);
 
        BUG_ON(iter->flags & BTREE_ITER_IS_EXTENTS);
-       bch2_trans_update(trans, iter, u, BTREE_TRIGGER_NORUN);
+       ret   = bch2_trans_update(trans, iter, u, BTREE_TRIGGER_NORUN) ?:
+               bch2_trans_commit(trans, NULL, NULL,
+                                 BTREE_INSERT_NOFAIL|
+                                 BTREE_INSERT_LAZY_RW);
        bch2_trans_iter_put(trans, iter);
-
-       return bch2_trans_commit(trans, NULL, NULL,
-                                BTREE_INSERT_NOFAIL|
-                                BTREE_INSERT_LAZY_RW);
+       return ret;
 }
 
 static int inode_backpointer_exists(struct btree_trans *trans,
@@ -887,7 +886,7 @@ retry:
                        ret = __bch2_trans_do(&trans, NULL, NULL,
                                              BTREE_INSERT_NOFAIL|
                                              BTREE_INSERT_LAZY_RW,
-                               (bch2_trans_update(&trans, iter, &n->k_i, 0), 0));
+                               bch2_trans_update(&trans, iter, &n->k_i, 0));
                        kfree(n);
                        if (ret)
                                goto err;
index 524da018e9d94feb996059649b635ba6e82817d2..18b568887144550e5532f790087eb5ac389a049c 100644 (file)
@@ -333,8 +333,7 @@ int bch2_inode_write(struct btree_trans *trans,
 
        bch2_inode_pack(trans->c, inode_p, inode);
        inode_p->inode.k.p.snapshot = iter->snapshot;
-       bch2_trans_update(trans, iter, &inode_p->inode.k_i, 0);
-       return 0;
+       return bch2_trans_update(trans, iter, &inode_p->inode.k_i, 0);
 }
 
 const char *bch2_inode_invalid(const struct bch_fs *c, struct bkey_s_c k)
@@ -629,9 +628,8 @@ retry:
        delete.k.p = iter->pos;
        delete.v.bi_generation = cpu_to_le32(inode_u.bi_generation + 1);
 
-       bch2_trans_update(&trans, iter, &delete.k_i, 0);
-
-       ret = bch2_trans_commit(&trans, NULL, NULL,
+       ret   = bch2_trans_update(&trans, iter, &delete.k_i, 0) ?:
+               bch2_trans_commit(&trans, NULL, NULL,
                                BTREE_INSERT_NOFAIL);
 err:
        bch2_trans_iter_put(&trans, iter);
index 4424129cad46fbd8c37756a479530778b013b63b..e13382fc5b01809fc4b792aedf0c8a0928b2138e 100644 (file)
@@ -311,8 +311,9 @@ int bch2_extent_update(struct btree_trans *trans,
 
                inode_iter = bch2_inode_peek(trans, &inode_u,
                                k->k.p.inode, BTREE_ITER_INTENT);
-               if (IS_ERR(inode_iter))
-                       return PTR_ERR(inode_iter);
+               ret = PTR_ERR_OR_ZERO(inode_iter);
+               if (ret)
+                       return ret;
 
                /*
                 * XXX:
@@ -339,11 +340,14 @@ int bch2_extent_update(struct btree_trans *trans,
 
                        inode_p.inode.k.p.snapshot = iter->snapshot;
 
-                       bch2_trans_update(trans, inode_iter,
+                       ret = bch2_trans_update(trans, inode_iter,
                                          &inode_p.inode.k_i, 0);
                }
 
                bch2_trans_iter_put(trans, inode_iter);
+
+               if (ret)
+                       return ret;
        }
 
        ret =   bch2_trans_update(trans, iter, k, 0) ?:
@@ -1780,7 +1784,7 @@ static int __bch2_rbio_narrow_crcs(struct btree_trans *trans,
        if (!bch2_bkey_narrow_crcs(new, new_crc))
                goto out;
 
-       bch2_trans_update(trans, iter, new, 0);
+       ret = bch2_trans_update(trans, iter, new, 0);
 out:
        bch2_trans_iter_put(trans, iter);
        return ret;
index ef69a19f494a1583d609a04632da248f599515e4..6ebe49ba224803b1731f2381f573182fb7ff546c 100644 (file)
@@ -73,9 +73,8 @@ static int __bch2_dev_usrdata_drop(struct bch_fs *c, unsigned dev_idx, int flags
 
                bch2_btree_iter_set_pos(iter, bkey_start_pos(&sk.k->k));
 
-               bch2_trans_update(&trans, iter, sk.k, 0);
-
-               ret = bch2_trans_commit(&trans, NULL, NULL,
+               ret   = bch2_trans_update(&trans, iter, sk.k, 0) ?:
+                       bch2_trans_commit(&trans, NULL, NULL,
                                        BTREE_INSERT_NOFAIL);
 
                /*
index 638cd7e97a46b01ce216b5b683b2049f3a380402..93d7beaa5fceb46659bcef94e13955c4dd4cf3c8 100644 (file)
@@ -162,9 +162,8 @@ int bch2_migrate_index_update(struct bch_write_op *op)
                                goto out;
                }
 
-               bch2_trans_update(&trans, iter, insert, 0);
-
-               ret = bch2_trans_commit(&trans, &op->res,
+               ret   = bch2_trans_update(&trans, iter, insert, 0) ?:
+                       bch2_trans_commit(&trans, &op->res,
                                op_journal_seq(op),
                                BTREE_INSERT_NOFAIL|
                                m->data_opts.btree_insert_flags);
index eab669af7032089a674de63735f5a9630009c1a0..2ff8e5bd2744b8839a1448a93055182ffc7f9478 100644 (file)
@@ -281,7 +281,7 @@ not_found:
                        swap(iter, slot);
 
                insert->k.p = iter->pos;
-               bch2_trans_update(trans, iter, insert, 0);
+               ret = bch2_trans_update(trans, iter, insert, 0);
        }
 
        goto out;
@@ -296,20 +296,20 @@ int bch2_hash_delete_at(struct btree_trans *trans,
        struct bkey_i *delete;
        int ret;
 
+       delete = bch2_trans_kmalloc(trans, sizeof(*delete));
+       ret = PTR_ERR_OR_ZERO(delete);
+       if (ret)
+               return ret;
+
        ret = bch2_hash_needs_whiteout(trans, desc, info, iter);
        if (ret < 0)
                return ret;
 
-       delete = bch2_trans_kmalloc(trans, sizeof(*delete));
-       if (IS_ERR(delete))
-               return PTR_ERR(delete);
-
        bkey_init(&delete->k);
        delete->k.p = iter->pos;
        delete->k.type = ret ? KEY_TYPE_hash_whiteout : KEY_TYPE_deleted;
 
-       bch2_trans_update(trans, iter, delete, 0);
-       return 0;
+       return bch2_trans_update(trans, iter, delete, 0);
 }
 
 static __always_inline
index bb475656637744a480ccbe6d838f6ac54e32ab05..87208da5e350fa541260804460560e874132f8c9 100644 (file)
@@ -621,7 +621,7 @@ static int __do_delete(struct btree_trans *trans, struct bpos pos)
        bkey_init(&delete.k);
        delete.k.p = k.k->p;
 
-       bch2_trans_update(trans, iter, &delete, 0);
+       ret = bch2_trans_update(trans, iter, &delete, 0);
 err:
        bch2_trans_iter_put(trans, iter);
        return ret;