diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2018-06-02 17:11:13 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2018-06-03 21:01:03 -0400 |
commit | 815710daa06e043f65675201a7f779a7a6391c90 (patch) | |
tree | 34b78ce62416cbde494610e4afa0e74ee95ebc5f | |
parent | 365f2957b1ba1375264dda9309cc9ea9ec5992d8 (diff) |
bcachefs: add a journal_seq_verify debug option
-rw-r--r-- | fs/bcachefs/bcachefs.h | 4 | ||||
-rw-r--r-- | fs/bcachefs/btree_gc.c | 3 | ||||
-rw-r--r-- | fs/bcachefs/btree_update_leaf.c | 5 |
3 files changed, 12 insertions, 0 deletions
diff --git a/fs/bcachefs/bcachefs.h b/fs/bcachefs/bcachefs.h index 4702b016945e..b9f0f8234007 100644 --- a/fs/bcachefs/bcachefs.h +++ b/fs/bcachefs/bcachefs.h @@ -259,6 +259,10 @@ do { \ "Reread btree nodes at various points to verify the " \ "mergesort in the read path against modifications " \ "done in memory") \ + BCH_DEBUG_PARAM(journal_seq_verify, \ + "Store the journal sequence number in the version " \ + "number of every btree key, and verify that btree " \ + "update ordering is preserved during recovery") #define BCH_DEBUG_PARAMS_ALL() BCH_DEBUG_PARAMS_ALWAYS() BCH_DEBUG_PARAMS_DEBUG() diff --git a/fs/bcachefs/btree_gc.c b/fs/bcachefs/btree_gc.c index 0904f445e375..6d1199fe67bd 100644 --- a/fs/bcachefs/btree_gc.c +++ b/fs/bcachefs/btree_gc.c @@ -148,6 +148,9 @@ int bch2_btree_mark_key_initial(struct bch_fs *c, enum bkey_type type, ? BCH_DATA_BTREE : BCH_DATA_USER; int ret = 0; + BUG_ON(journal_seq_verify(c) && + k.k->version.lo > journal_cur_seq(&c->journal)); + if (test_bit(BCH_FS_REBUILD_REPLICAS, &c->flags) || fsck_err_on(!bch2_bkey_replicas_marked(c, data_type, k), c, "superblock not marked as containing replicas (type %u)", diff --git a/fs/bcachefs/btree_update_leaf.c b/fs/bcachefs/btree_update_leaf.c index 10cb8947109c..3cfac2954d77 100644 --- a/fs/bcachefs/btree_update_leaf.c +++ b/fs/bcachefs/btree_update_leaf.c @@ -356,6 +356,11 @@ static inline int do_btree_insert_at(struct btree_insert *trans, } } + if (journal_seq_verify(c) && + !(trans->flags & BTREE_INSERT_JOURNAL_REPLAY)) + trans_for_each_entry(trans, i) + i->k->k.version.lo = trans->journal_res.seq; + trans_for_each_entry(trans, i) { switch (btree_insert_key_leaf(trans, i)) { case BTREE_INSERT_OK: |