summaryrefslogtreecommitdiff
path: root/fs/bcachefs/recovery.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2021-04-06 21:19:25 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-22 17:08:59 -0400
commit3a14d58e7b330f3526509917bb6a38b55a1feef5 (patch)
tree13be76bfad354f261cd0645a20bcf35139db92fa /fs/bcachefs/recovery.c
parentb6d4f474e4e785a9090992b0f301e57870f73711 (diff)
downloadlwn-3a14d58e7b330f3526509917bb6a38b55a1feef5.tar.gz
lwn-3a14d58e7b330f3526509917bb6a38b55a1feef5.zip
bcachefs: Drop bch2_fsck_inode_nlink()
We've had BCH_FEATURE_atomic_nlink for quite some time, we can drop this now. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/recovery.c')
-rw-r--r--fs/bcachefs/recovery.c33
1 files changed, 14 insertions, 19 deletions
diff --git a/fs/bcachefs/recovery.c b/fs/bcachefs/recovery.c
index a3a6abb88d6f..24c0646913a8 100644
--- a/fs/bcachefs/recovery.c
+++ b/fs/bcachefs/recovery.c
@@ -1005,6 +1005,13 @@ int bch2_fs_recovery(struct bch_fs *c)
}
+ if (!c->sb.clean &&
+ !(c->sb.features & (1 << BCH_FEATURE_atomic_nlink))) {
+ bch_info(c, "BCH_FEATURE_atomic_nlink not set and filesystem dirty, fsck required");
+ c->opts.fsck = true;
+ c->opts.fix_errors = FSCK_OPT_YES;
+ }
+
if (!(c->sb.features & (1ULL << BCH_FEATURE_alloc_v2))) {
bch_info(c, "alloc_v2 feature bit not set, fsck required");
c->opts.fsck = true;
@@ -1181,25 +1188,6 @@ use_clean:
bch_verbose(c, "alloc write done");
}
- if (!c->sb.clean) {
- if (!(c->sb.features & (1 << BCH_FEATURE_atomic_nlink))) {
- bch_info(c, "checking inode link counts");
- err = "error in recovery";
- ret = bch2_fsck_inode_nlink(c);
- if (ret)
- goto err;
- bch_verbose(c, "check inodes done");
-
- } else {
- bch_verbose(c, "checking for deleted inodes");
- err = "error in recovery";
- ret = bch2_fsck_walk_inodes_only(c);
- if (ret)
- goto err;
- bch_verbose(c, "check inodes done");
- }
- }
-
if (c->opts.fsck) {
bch_info(c, "starting fsck");
err = "error in fsck";
@@ -1207,6 +1195,13 @@ use_clean:
if (ret)
goto err;
bch_verbose(c, "fsck done");
+ } else if (!c->sb.clean) {
+ bch_verbose(c, "checking for deleted inodes");
+ err = "error in recovery";
+ ret = bch2_fsck_walk_inodes_only(c);
+ if (ret)
+ goto err;
+ bch_verbose(c, "check inodes done");
}
if (enabled_qtypes(c)) {