summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2021-06-02 00:15:07 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2021-06-02 00:15:51 -0400
commit55bd3589fd29cfff46c5c8a0576b215bc9a78f68 (patch)
tree44b7ea8730045e25e097522d28944e5c2418439f
parent05ed308a527fd595910dcfe5a67d9cac04490e37 (diff)
bcachefs: Check for errors from bch2_trans_update()
Upcoming refactoring is going to change bch2_trans_update() to start returning transaction restarts. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
-rw-r--r--fs/bcachefs/acl.c2
-rw-r--r--fs/bcachefs/alloc_background.c9
-rw-r--r--fs/bcachefs/btree_gc.c5
-rw-r--r--fs/bcachefs/btree_update_leaf.c10
-rw-r--r--fs/bcachefs/buckets.c4
-rw-r--r--fs/bcachefs/ec.c15
-rw-r--r--fs/bcachefs/fsck.c17
-rw-r--r--fs/bcachefs/inode.c8
-rw-r--r--fs/bcachefs/io.c12
-rw-r--r--fs/bcachefs/migrate.c5
-rw-r--r--fs/bcachefs/move.c5
-rw-r--r--fs/bcachefs/str_hash.h14
-rw-r--r--fs/bcachefs/tests.c2
13 files changed, 54 insertions, 54 deletions
diff --git a/fs/bcachefs/acl.c b/fs/bcachefs/acl.c
index 0f2d7437c740..594e1f1a1291 100644
--- a/fs/bcachefs/acl.c
+++ b/fs/bcachefs/acl.c
@@ -383,7 +383,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:
diff --git a/fs/bcachefs/alloc_background.c b/fs/bcachefs/alloc_background.c
index dfcd95c3dc35..2324b81c09ce 100644
--- a/fs/bcachefs/alloc_background.c
+++ b/fs/bcachefs/alloc_background.c
@@ -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;
diff --git a/fs/bcachefs/btree_gc.c b/fs/bcachefs/btree_gc.c
index b03432c13fbb..ba560fbd5f36 100644
--- a/fs/bcachefs/btree_gc.c
+++ b/fs/bcachefs/btree_gc.c
@@ -1665,9 +1665,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) {
diff --git a/fs/bcachefs/btree_update_leaf.c b/fs/bcachefs/btree_update_leaf.c
index 70d2186e509f..cc7acce171a2 100644
--- a/fs/bcachefs/btree_update_leaf.c
+++ b/fs/bcachefs/btree_update_leaf.c
@@ -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;
diff --git a/fs/bcachefs/buckets.c b/fs/bcachefs/buckets.c
index d07085a2fd1b..2b5e1d5c6a29 100644
--- a/fs/bcachefs/buckets.c
+++ b/fs/bcachefs/buckets.c
@@ -1873,7 +1873,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:
diff --git a/fs/bcachefs/ec.c b/fs/bcachefs/ec.c
index fa7450d2b2ad..db6e4f6cac37 100644
--- a/fs/bcachefs/ec.c
+++ b/fs/bcachefs/ec.c
@@ -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)
diff --git a/fs/bcachefs/fsck.c b/fs/bcachefs/fsck.c
index a40459d2b0f0..89a130d9c537 100644
--- a/fs/bcachefs/fsck.c
+++ b/fs/bcachefs/fsck.c
@@ -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;
diff --git a/fs/bcachefs/inode.c b/fs/bcachefs/inode.c
index 6b43a9716cf0..f77b57490341 100644
--- a/fs/bcachefs/inode.c
+++ b/fs/bcachefs/inode.c
@@ -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);
diff --git a/fs/bcachefs/io.c b/fs/bcachefs/io.c
index 157b2a0fc582..ab37eff0c778 100644
--- a/fs/bcachefs/io.c
+++ b/fs/bcachefs/io.c
@@ -301,8 +301,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:
@@ -329,11 +330,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) ?:
@@ -1783,7 +1787,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;
diff --git a/fs/bcachefs/migrate.c b/fs/bcachefs/migrate.c
index ef69a19f494a..6ebe49ba2248 100644
--- a/fs/bcachefs/migrate.c
+++ b/fs/bcachefs/migrate.c
@@ -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);
/*
diff --git a/fs/bcachefs/move.c b/fs/bcachefs/move.c
index 2fa763e35392..91be50812a38 100644
--- a/fs/bcachefs/move.c
+++ b/fs/bcachefs/move.c
@@ -163,9 +163,8 @@ static 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);
diff --git a/fs/bcachefs/str_hash.h b/fs/bcachefs/str_hash.h
index eab669af7032..2ff8e5bd2744 100644
--- a/fs/bcachefs/str_hash.h
+++ b/fs/bcachefs/str_hash.h
@@ -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
diff --git a/fs/bcachefs/tests.c b/fs/bcachefs/tests.c
index 254e3b314204..63f4a83ad1de 100644
--- a/fs/bcachefs/tests.c
+++ b/fs/bcachefs/tests.c
@@ -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;