From b2a9318aa86edfe267805890c5ff1511caa59e70 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Mon, 21 Mar 2022 03:06:23 -0400 Subject: [PATCH] Update bcachefs sources to 367a8fad45 bcachefs: Reset journal flush delay to default value if zeroed --- .bcachefs_revision | 2 +- libbcachefs/journal_io.c | 12 ++++++++++-- libbcachefs/opts.c | 4 ++-- libbcachefs/super-io.c | 19 ++++++++++++++++--- 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/.bcachefs_revision b/.bcachefs_revision index 3072ae8..9f55ece 100644 --- a/.bcachefs_revision +++ b/.bcachefs_revision @@ -1 +1 @@ -0e705f5944069d3ded1d9238f7805dd210e79a25 +367a8fad45924ce9fbe808964d1783c391a11bea diff --git a/libbcachefs/journal_io.c b/libbcachefs/journal_io.c index fca9bc4..e61b889 100644 --- a/libbcachefs/journal_io.c +++ b/libbcachefs/journal_io.c @@ -966,8 +966,16 @@ static void bch2_journal_read_device(struct closure *cl) } mutex_unlock(&jlist->lock); - BUG_ON(ja->bucket_seq[ja->cur_idx] && - ja->sectors_free == ca->mi.bucket_size); + if (ja->bucket_seq[ja->cur_idx] && + ja->sectors_free == ca->mi.bucket_size) { + bch_err(c, "ja->sectors_free == ca->mi.bucket_size"); + bch_err(c, "cur_idx %u/%u", ja->cur_idx, ja->nr); + for (i = 0; i < 3; i++) { + unsigned idx = ja->cur_idx - 1 + i; + bch_err(c, "bucket_seq[%u] = %llu", idx, ja->bucket_seq[idx]); + } + ja->sectors_free = 0; + } /* * Set dirty_idx to indicate the entire journal is full and needs to be diff --git a/libbcachefs/opts.c b/libbcachefs/opts.c index a71054c..77fbb7d 100644 --- a/libbcachefs/opts.c +++ b/libbcachefs/opts.c @@ -9,10 +9,10 @@ #include "super-io.h" #include "util.h" -#define x(t, n) #t, +#define x(t, n) [n] = #t, const char * const bch2_metadata_versions[] = { - BCH_MEMBER_STATES() + BCH_METADATA_VERSIONS() NULL }; diff --git a/libbcachefs/super-io.c b/libbcachefs/super-io.c index c917bdd..be61c20 100644 --- a/libbcachefs/super-io.c +++ b/libbcachefs/super-io.c @@ -248,7 +248,8 @@ static int validate_sb_layout(struct bch_sb_layout *layout, struct printbuf *out return 0; } -static int bch2_sb_validate(struct bch_sb_handle *disk_sb, struct printbuf *out) +static int bch2_sb_validate(struct bch_sb_handle *disk_sb, struct printbuf *out, + int rw) { struct bch_sb *sb = disk_sb->sb; struct bch_sb_field *f; @@ -325,6 +326,18 @@ static int bch2_sb_validate(struct bch_sb_handle *disk_sb, struct printbuf *out) return -EINVAL; } + if (rw == READ) { + /* + * Been seeing a bug where these are getting inexplicably + * zeroed, so we'r now validating them, but we have to be + * careful not to preven people's filesystems from mounting: + */ + if (!BCH_SB_JOURNAL_FLUSH_DELAY(sb)) + SET_BCH_SB_JOURNAL_FLUSH_DELAY(sb, 1000); + if (!BCH_SB_JOURNAL_RECLAIM_DELAY(sb)) + SET_BCH_SB_JOURNAL_RECLAIM_DELAY(sb, 1000); + } + for (opt_id = 0; opt_id < bch2_opts_nr; opt_id++) { const struct bch_option *opt = bch2_opt_table + opt_id; @@ -691,7 +704,7 @@ got_super: ret = 0; sb->have_layout = true; - ret = bch2_sb_validate(sb, &err); + ret = bch2_sb_validate(sb, &err, READ); if (ret) { printk(KERN_ERR "bcachefs (%s): error validating superblock: %s", path, err.buf); @@ -807,7 +820,7 @@ int bch2_write_super(struct bch_fs *c) for_each_online_member(ca, c, i) { printbuf_reset(&err); - ret = bch2_sb_validate(&ca->disk_sb, &err); + ret = bch2_sb_validate(&ca->disk_sb, &err, WRITE); if (ret) { bch2_fs_inconsistent(c, "sb invalid before write: %s", err.buf); percpu_ref_put(&ca->io_ref); -- 2.39.2