summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2017-12-02 09:52:06 -0500
committerKent Overstreet <kent.overstreet@gmail.com>2018-01-30 20:40:52 -0500
commit3711a3bb33ac1f927c808ee93338c7356c198877 (patch)
treef79df003583a7b1d2a4751057cd064596e0a125f
parent30e379881a9a4c2474837078a21cbadfc882d0a0 (diff)
bcachefs: inject some faults, add some assertions
-rw-r--r--fs/bcachefs/btree_update_leaf.c5
-rw-r--r--fs/bcachefs/extents.c3
-rw-r--r--fs/bcachefs/fs-io.c4
3 files changed, 12 insertions, 0 deletions
diff --git a/fs/bcachefs/btree_update_leaf.c b/fs/bcachefs/btree_update_leaf.c
index 6c490dd30659..e62e0d2e7fec 100644
--- a/fs/bcachefs/btree_update_leaf.c
+++ b/fs/bcachefs/btree_update_leaf.c
@@ -355,6 +355,11 @@ retry:
multi_lock_write(c, trans);
+ if (race_fault()) {
+ ret = -EINTR;
+ goto unlock;
+ }
+
u64s = 0;
trans_for_each_entry(trans, i) {
/* Multiple inserts might go to same leaf: */
diff --git a/fs/bcachefs/extents.c b/fs/bcachefs/extents.c
index 76a2855356bb..fe764a12f426 100644
--- a/fs/bcachefs/extents.c
+++ b/fs/bcachefs/extents.c
@@ -1288,6 +1288,9 @@ extent_insert_advance_pos(struct extent_insert_state *s, struct bkey_s_c k)
struct bpos next_pos = bpos_min(s->insert->k->k.p,
k.k ? k.k->p : b->key.k.p);
+ if (race_fault())
+ return BTREE_HOOK_RESTART_TRANS;
+
/* hole? */
if (k.k && bkey_cmp(s->committed, bkey_start_pos(k.k)) < 0) {
bool have_uncommitted = bkey_cmp(s->committed,
diff --git a/fs/bcachefs/fs-io.c b/fs/bcachefs/fs-io.c
index 6fd67562a2f0..d9f46afd0412 100644
--- a/fs/bcachefs/fs-io.c
+++ b/fs/bcachefs/fs-io.c
@@ -352,12 +352,16 @@ static int bchfs_write_index_update(struct bch_write_op *wop)
BTREE_INSERT_NOFAIL|BTREE_INSERT_ATOMIC,
BTREE_INSERT_ENTRY(&extent_iter, k));
}
+
+ BUG_ON(bkey_cmp(extent_iter.pos, bkey_start_pos(&k->k)));
+ BUG_ON(!ret != !k->k.size);
err:
if (ret == -EINTR)
continue;
if (ret)
break;
+ BUG_ON(bkey_cmp(extent_iter.pos, k->k.p) < 0);
bch2_keylist_pop_front(keys);
} while (!bch2_keylist_empty(keys));