bcachefs: Fix BCH_FS_ERROR flag handling
authorKent Overstreet <kent.overstreet@gmail.com>
Sun, 21 Nov 2021 21:15:48 +0000 (16:15 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:17 +0000 (17:09 -0400)
We were setting BCH_FS_ERROR on startup if the superblock was marked as
containing errors, which is not what we wanted - BCH_FS_ERROR indicates
whether errors have been found, so that after a successful fsck we're
able to clear the error bit in the superblock.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
fs/bcachefs/btree_gc.c
fs/bcachefs/super-io.c

index ec5b7e2..a15b3bf 100644 (file)
@@ -1632,7 +1632,7 @@ again:
 
        bch2_mark_superblocks(c);
 
-       if (test_bit(BCH_FS_TOPOLOGY_ERROR, &c->flags) &&
+       if (BCH_SB_HAS_TOPOLOGY_ERRORS(c->disk_sb.sb) &&
            !test_bit(BCH_FS_INITIAL_GC_DONE, &c->flags) &&
            c->opts.fix_errors != FSCK_OPT_NO) {
                bch_info(c, "starting topology repair pass");
index 3cc5d8e..170f7d4 100644 (file)
@@ -445,16 +445,6 @@ int bch2_sb_to_fs(struct bch_fs *c, struct bch_sb *src)
 
        __copy_super(&c->disk_sb, src);
 
-       if (BCH_SB_HAS_ERRORS(c->disk_sb.sb))
-               set_bit(BCH_FS_ERROR, &c->flags);
-       else
-               clear_bit(BCH_FS_ERROR, &c->flags);
-
-       if (BCH_SB_HAS_TOPOLOGY_ERRORS(c->disk_sb.sb))
-               set_bit(BCH_FS_TOPOLOGY_ERROR, &c->flags);
-       else
-               clear_bit(BCH_FS_TOPOLOGY_ERROR, &c->flags);
-
        if (BCH_SB_INITIALIZED(c->disk_sb.sb))
                set_bit(BCH_FS_INITIALIZED, &c->flags);