summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2019-04-01 02:23:34 +0300
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-23 00:08:19 +0300
commitdcf77129749fea4f6608d310161be1650dc2a4dc (patch)
tree465d7831b8b259b9fa0e6595a79b8962f1ef24ab
parent6bd1305735bc4346e0ca6cc0ff27517e8bab8f0d (diff)
downloadlinux-dcf77129749fea4f6608d310161be1650dc2a4dc.tar.xz
bcachefs: minor fsck fix
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--fs/bcachefs/fsck.c30
1 files changed, 12 insertions, 18 deletions
diff --git a/fs/bcachefs/fsck.c b/fs/bcachefs/fsck.c
index 661131d5a114..9db01437315b 100644
--- a/fs/bcachefs/fsck.c
+++ b/fs/bcachefs/fsck.c
@@ -1240,12 +1240,10 @@ static int check_inode(struct btree_trans *trans,
return ret;
}
- if (u.bi_flags & BCH_INODE_UNLINKED) {
- fsck_err_on(c->sb.clean, c,
- "filesystem marked clean, "
- "but inode %llu unlinked",
- u.bi_inum);
-
+ if (u.bi_flags & BCH_INODE_UNLINKED &&
+ (!c->sb.clean ||
+ fsck_err(c, "filesystem marked clean, but inode %llu unlinked",
+ u.bi_inum))) {
bch_verbose(c, "deleting inode %llu", u.bi_inum);
ret = bch2_inode_rm(c, u.bi_inum);
@@ -1255,12 +1253,10 @@ static int check_inode(struct btree_trans *trans,
return ret;
}
- if (u.bi_flags & BCH_INODE_I_SIZE_DIRTY) {
- fsck_err_on(c->sb.clean, c,
- "filesystem marked clean, "
- "but inode %llu has i_size dirty",
- u.bi_inum);
-
+ if (u.bi_flags & BCH_INODE_I_SIZE_DIRTY &&
+ (!c->sb.clean ||
+ fsck_err(c, "filesystem marked clean, but inode %llu has i_size dirty",
+ u.bi_inum))) {
bch_verbose(c, "truncating inode %llu", u.bi_inum);
/*
@@ -1285,14 +1281,12 @@ static int check_inode(struct btree_trans *trans,
do_update = true;
}
- if (u.bi_flags & BCH_INODE_I_SECTORS_DIRTY) {
+ if (u.bi_flags & BCH_INODE_I_SECTORS_DIRTY &&
+ (!c->sb.clean ||
+ fsck_err(c, "filesystem marked clean, but inode %llu has i_sectors dirty",
+ u.bi_inum))) {
s64 sectors;
- fsck_err_on(c->sb.clean, c,
- "filesystem marked clean, "
- "but inode %llu has i_sectors dirty",
- u.bi_inum);
-
bch_verbose(c, "recounting sectors for inode %llu",
u.bi_inum);