bcachefs: More debug params for testing of recovery paths
authorKent Overstreet <kent.overstreet@gmail.com>
Thu, 21 Mar 2019 23:03:57 +0000 (19:03 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:18 +0000 (17:08 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/bcachefs.h
fs/bcachefs/btree_gc.c
fs/bcachefs/recovery.c

index ea648753aec0761b011253b3fc7426da0575c7d5..5a9b776558f6354143a40b3f2092383c56dedf7d 100644 (file)
@@ -278,7 +278,11 @@ do {                                                                       \
                "cached data")                                          \
        BCH_DEBUG_PARAM(force_reconstruct_read,                         \
                "Force reads to use the reconstruct path, when reading" \
-               "from erasure coded extents")
+               "from erasure coded extents")                           \
+       BCH_DEBUG_PARAM(test_restart_gc,                                \
+               "Test restarting mark and sweep gc when bucket gens change")\
+       BCH_DEBUG_PARAM(test_reconstruct_alloc,                         \
+               "Test reconstructing the alloc btree")
 
 #define BCH_DEBUG_PARAMS_ALL() BCH_DEBUG_PARAMS_ALWAYS() BCH_DEBUG_PARAMS_DEBUG()
 
index c899a77bf89192646ba1f6487873aa89d13946a7..0069d6cb6e5dd6d39c10281cd0b1eb61044d6352 100644 (file)
@@ -750,7 +750,9 @@ again:
 
        c->gc_count++;
 out:
-       if (!ret && test_bit(BCH_FS_FIXED_GENS, &c->flags)) {
+       if (!ret &&
+           (test_bit(BCH_FS_FIXED_GENS, &c->flags) ||
+            (!iter && test_restart_gc(c)))) {
                /*
                 * XXX: make sure gens we fixed got saved
                 */
index 24101023a5b9ebe37d364c03363828425b7cd976..d7be535f3cc1bb17ced4f36de748d43dae77a1cb 100644 (file)
@@ -277,6 +277,10 @@ int bch2_fs_recovery(struct bch_fs *c)
                if (r->error)
                        goto err;
 
+               if (i == BTREE_ID_ALLOC &&
+                   test_reconstruct_alloc(c))
+                       continue;
+
                err = "error reading btree root";
                ret = bch2_btree_root_read(c, i, &r->key, r->level);
                if (ret) {