summaryrefslogtreecommitdiff
path: root/fs/bcachefs/error.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2019-03-28 03:28:59 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-22 17:08:19 -0400
commit6543f5620d81cfa7b52d00c7ade0f037beb7a71e (patch)
treeef10c47e7c4bce5bd79790c2fe88eff5f41ebaae /fs/bcachefs/error.c
parent05b3d5ac1f4ea75defa4e133ca23a953b4a80c23 (diff)
bcachefs: Handle fsck errors at runtime better
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/error.c')
-rw-r--r--fs/bcachefs/error.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/fs/bcachefs/error.c b/fs/bcachefs/error.c
index 08e79166dae4..f0a44101b7e7 100644
--- a/fs/bcachefs/error.c
+++ b/fs/bcachefs/error.c
@@ -67,10 +67,20 @@ enum fsck_err_ret bch2_fsck_err(struct bch_fs *c, unsigned flags,
bool fix = false, print = true, suppressing = false;
char _buf[sizeof(s->buf)], *buf = _buf;
- mutex_lock(&c->fsck_error_lock);
+ if (test_bit(BCH_FS_FSCK_DONE, &c->flags)) {
+ va_start(args, fmt);
+ vprintk(fmt, args);
+ va_end(args);
- if (test_bit(BCH_FS_FSCK_DONE, &c->flags))
- goto print;
+ if (c->opts.errors == BCH_ON_ERROR_CONTINUE &&
+ flags & FSCK_CAN_FIX)
+ return FSCK_ERR_FIX;
+
+ bch2_inconsistent_error(c);
+ return FSCK_ERR_EXIT;
+ }
+
+ mutex_lock(&c->fsck_error_lock);
list_for_each_entry(s, &c->fsck_errors, list)
if (s->fmt == fmt)