summaryrefslogtreecommitdiff
path: root/libbcachefs/error.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2025-07-01 13:19:04 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2025-07-02 14:45:52 -0400
commit27e51d62ea4d030a74357ce436886f4187f9380c (patch)
treee22ea35e64961f8888eae8d7a0cfe27fdc966c62 /libbcachefs/error.c
parent4145de1746459e118783b51e45f9a1fe9b6d2005 (diff)
Update bcachefs sources to 48d506769bc0 bcachefs: bch2_journal_entry_missing_range()
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'libbcachefs/error.c')
-rw-r--r--libbcachefs/error.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/libbcachefs/error.c b/libbcachefs/error.c
index b2a6c041..a9a9fe19 100644
--- a/libbcachefs/error.c
+++ b/libbcachefs/error.c
@@ -401,7 +401,8 @@ int bch2_fsck_err_opt(struct bch_fs *c,
if (!WARN_ON(err >= ARRAY_SIZE(fsck_flags_extra)))
flags |= fsck_flags_extra[err];
- if (test_bit(BCH_FS_in_fsck, &c->flags)) {
+ if (test_bit(BCH_FS_in_fsck, &c->flags) ||
+ test_bit(BCH_FS_in_recovery, &c->flags)) {
if (!(flags & (FSCK_CAN_FIX|FSCK_CAN_IGNORE)))
return bch_err_throw(c, fsck_repair_unimplemented);
@@ -472,10 +473,13 @@ int __bch2_fsck_err(struct bch_fs *c,
!trans &&
bch2_current_has_btree_trans(c));
- if (test_bit(err, c->sb.errors_silent))
- return flags & FSCK_CAN_FIX
+ if ((flags & FSCK_ERR_SILENT) ||
+ test_bit(err, c->sb.errors_silent)) {
+ ret = flags & FSCK_CAN_FIX
? bch_err_throw(c, fsck_fix)
: bch_err_throw(c, fsck_ignore);
+ goto err;
+ }
printbuf_indent_add_nextline(out, 2);
@@ -620,14 +624,14 @@ print:
if (s)
s->ret = ret;
-
+err_unlock:
+ mutex_unlock(&c->fsck_error_msgs_lock);
+err:
if (trans &&
!(flags & FSCK_ERR_NO_LOG) &&
ret == -BCH_ERR_fsck_fix)
ret = bch2_trans_log_str(trans, bch2_sb_error_strs[err]) ?: ret;
-err_unlock:
- mutex_unlock(&c->fsck_error_msgs_lock);
-err:
+
/*
* We don't yet track whether the filesystem currently has errors, for
* log_fsck_err()s: that would require us to track for every error type