diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2019-09-07 19:42:27 +0300 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-23 00:08:26 +0300 |
commit | 89b0511826c1bde65f57a2e051ee9fcb274bff69 (patch) | |
tree | b6c7e5c5a635005e01c8022b78c3d4284223a494 /fs/bcachefs | |
parent | 5055b50939843c027e1cf4602316035d9f21f032 (diff) | |
download | linux-89b0511826c1bde65f57a2e051ee9fcb274bff69.tar.xz |
bcachefs: Flush fsck errors when looping in btree gc
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs')
-rw-r--r-- | fs/bcachefs/btree_gc.c | 2 | ||||
-rw-r--r-- | fs/bcachefs/error.c | 9 | ||||
-rw-r--r-- | fs/bcachefs/recovery.c | 2 |
3 files changed, 9 insertions, 4 deletions
diff --git a/fs/bcachefs/btree_gc.c b/fs/bcachefs/btree_gc.c index c4a7ff5f8a08..03a3d24d7451 100644 --- a/fs/bcachefs/btree_gc.c +++ b/fs/bcachefs/btree_gc.c @@ -764,6 +764,8 @@ out: percpu_down_write(&c->mark_lock); bch2_gc_free(c); percpu_up_write(&c->mark_lock); + /* flush fsck errors, reset counters */ + bch2_flush_fsck_errs(c); goto again; } diff --git a/fs/bcachefs/error.c b/fs/bcachefs/error.c index 1aaff44e18cf..304ff92500be 100644 --- a/fs/bcachefs/error.c +++ b/fs/bcachefs/error.c @@ -4,6 +4,8 @@ #include "io.h" #include "super.h" +#define FSCK_ERR_RATELIMIT_NR 10 + bool bch2_inconsistent_error(struct bch_fs *c) { set_bit(BCH_FS_ERROR, &c->flags); @@ -97,8 +99,8 @@ enum fsck_err_ret bch2_fsck_err(struct bch_fs *c, unsigned flags, found: list_move(&s->list, &c->fsck_errors); s->nr++; - suppressing = s->nr == 10; - print = s->nr <= 10; + suppressing = s->nr == FSCK_ERR_RATELIMIT_NR; + print = s->nr <= FSCK_ERR_RATELIMIT_NR; buf = s->buf; print: va_start(args, fmt); @@ -152,10 +154,9 @@ void bch2_flush_fsck_errs(struct bch_fs *c) struct fsck_err_state *s, *n; mutex_lock(&c->fsck_error_lock); - set_bit(BCH_FS_FSCK_DONE, &c->flags); list_for_each_entry_safe(s, n, &c->fsck_errors, list) { - if (s->nr > 10) + if (s->nr > FSCK_ERR_RATELIMIT_NR) bch_err(c, "Saw %llu errors like:\n %s", s->nr, s->buf); list_del(&s->list); diff --git a/fs/bcachefs/recovery.c b/fs/bcachefs/recovery.c index c9558ccb9a26..5be34231a0c3 100644 --- a/fs/bcachefs/recovery.c +++ b/fs/bcachefs/recovery.c @@ -936,7 +936,9 @@ out: ret = 0; err: fsck_err: + set_bit(BCH_FS_FSCK_DONE, &c->flags); bch2_flush_fsck_errs(c); + journal_keys_free(&journal_keys); journal_entries_free(&journal_entries); kfree(clean); |