summaryrefslogtreecommitdiff
path: root/fs/bcachefs
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2021-04-07 04:19:25 +0300
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-23 00:08:59 +0300
commit3a14d58e7b330f3526509917bb6a38b55a1feef5 (patch)
tree13be76bfad354f261cd0645a20bcf35139db92fa /fs/bcachefs
parentb6d4f474e4e785a9090992b0f301e57870f73711 (diff)
downloadlinux-3a14d58e7b330f3526509917bb6a38b55a1feef5.tar.xz
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')
-rw-r--r--fs/bcachefs/fsck.c9
-rw-r--r--fs/bcachefs/fsck.h1
-rw-r--r--fs/bcachefs/recovery.c33
3 files changed, 14 insertions, 29 deletions
diff --git a/fs/bcachefs/fsck.c b/fs/bcachefs/fsck.c
index 36baff8409cd..8fa41b36f72d 100644
--- a/fs/bcachefs/fsck.c
+++ b/fs/bcachefs/fsck.c
@@ -1468,15 +1468,6 @@ int bch2_fsck_full(struct bch_fs *c)
check_inode_nlinks(c, &lostfound_inode);
}
-int bch2_fsck_inode_nlink(struct bch_fs *c)
-{
- struct bch_inode_unpacked root_inode, lostfound_inode;
-
- return check_root(c, &root_inode) ?:
- check_lostfound(c, &root_inode, &lostfound_inode) ?:
- check_inode_nlinks(c, &lostfound_inode);
-}
-
int bch2_fsck_walk_inodes_only(struct bch_fs *c)
{
struct btree_trans trans;
diff --git a/fs/bcachefs/fsck.h b/fs/bcachefs/fsck.h
index 9e4af02bde1e..264f2706b12d 100644
--- a/fs/bcachefs/fsck.h
+++ b/fs/bcachefs/fsck.h
@@ -3,7 +3,6 @@
#define _BCACHEFS_FSCK_H
int bch2_fsck_full(struct bch_fs *);
-int bch2_fsck_inode_nlink(struct bch_fs *);
int bch2_fsck_walk_inodes_only(struct bch_fs *);
#endif /* _BCACHEFS_FSCK_H */
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)) {