diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2017-12-02 09:52:06 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2018-01-30 20:40:52 -0500 |
commit | 3711a3bb33ac1f927c808ee93338c7356c198877 (patch) | |
tree | f79df003583a7b1d2a4751057cd064596e0a125f | |
parent | 30e379881a9a4c2474837078a21cbadfc882d0a0 (diff) |
bcachefs: inject some faults, add some assertions
-rw-r--r-- | fs/bcachefs/btree_update_leaf.c | 5 | ||||
-rw-r--r-- | fs/bcachefs/extents.c | 3 | ||||
-rw-r--r-- | fs/bcachefs/fs-io.c | 4 |
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)); |