summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2021-11-22 00:15:48 +0300
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-23 00:09:17 +0300
commit7468c4effc8c93464ec0fd4336494312bebb8033 (patch)
treeafe9767e9ecc86a78600e47209cf598d13f9c42c
parente5464a371d048865cd4fcba48879c4b37727df2e (diff)
downloadlinux-7468c4effc8c93464ec0fd4336494312bebb8033.tar.xz
bcachefs: Fix BCH_FS_ERROR flag handling
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>
-rw-r--r--fs/bcachefs/btree_gc.c2
-rw-r--r--fs/bcachefs/super-io.c10
2 files changed, 1 insertions, 11 deletions
diff --git a/fs/bcachefs/btree_gc.c b/fs/bcachefs/btree_gc.c
index ec5b7e2c7271..a15b3bfa9d47 100644
--- a/fs/bcachefs/btree_gc.c
+++ b/fs/bcachefs/btree_gc.c
@@ -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");
diff --git a/fs/bcachefs/super-io.c b/fs/bcachefs/super-io.c
index 3cc5d8ea743f..170f7d46fa34 100644
--- a/fs/bcachefs/super-io.c
+++ b/fs/bcachefs/super-io.c
@@ -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);