diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2019-03-21 19:02:48 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2019-03-21 19:02:48 -0400 |
commit | 82c87eb5e4de0696bffab1b6dbe5985272c4fbca (patch) | |
tree | 0992ab4ad74e09ff3d457f8cb4f9f416ae6d93db | |
parent | d5cb6fc38bec0af8f35922d0a6675da7ac6ff89c (diff) |
bcachefs: Run gc if failed to read alloc btree
-rw-r--r-- | fs/bcachefs/recovery.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/bcachefs/recovery.c b/fs/bcachefs/recovery.c index 1dc15833154f..193c7015530a 100644 --- a/fs/bcachefs/recovery.c +++ b/fs/bcachefs/recovery.c @@ -186,6 +186,8 @@ int bch2_fs_recovery(struct bch_fs *c) LIST_HEAD(journal); struct jset *j = NULL; unsigned i; + bool run_gc = c->opts.fsck || + !(c->sb.compat & (1ULL << BCH_COMPAT_FEAT_ALLOC_INFO)); int ret; mutex_lock(&c->sb_lock); @@ -281,6 +283,7 @@ int bch2_fs_recovery(struct bch_fs *c) goto err; mustfix_fsck_err(c, "error reading btree root"); + run_gc = true; } } @@ -301,8 +304,7 @@ int bch2_fs_recovery(struct bch_fs *c) set_bit(BCH_FS_ALLOC_READ_DONE, &c->flags); - if (!(c->sb.compat & (1ULL << BCH_COMPAT_FEAT_ALLOC_INFO)) || - c->opts.fsck) { + if (run_gc) { bch_verbose(c, "starting mark and sweep:"); err = "error in recovery"; ret = bch2_gc(c, &journal, true); |