From 19005ecf086b1067362d907c185298d3a43e67e4 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Sat, 3 Nov 2018 21:56:27 -0400 Subject: [PATCH] Update bcachefs sources to defaad6d47 bcachefs: Fix an assertion when rebuilding replicas --- .bcachefs_revision | 2 +- libbcachefs/extents.c | 6 ++++-- libbcachefs/fsck.c | 2 +- libbcachefs/journal_io.c | 3 ++- libbcachefs/opts.h | 4 ++-- libbcachefs/recovery.c | 4 +++- 6 files changed, 13 insertions(+), 8 deletions(-) diff --git a/.bcachefs_revision b/.bcachefs_revision index 4c8c8d11..b6371345 100644 --- a/.bcachefs_revision +++ b/.bcachefs_revision @@ -1 +1 @@ -b12d1535f33661c5f11925d9a2debe28be661088 +defaad6d47791d3e6285cba323f92847b6e4c226 diff --git a/libbcachefs/extents.c b/libbcachefs/extents.c index 6eaa89c9..ef36d244 100644 --- a/libbcachefs/extents.c +++ b/libbcachefs/extents.c @@ -679,7 +679,8 @@ void bch2_btree_ptr_debugcheck(struct bch_fs *c, struct btree *b, goto err; } - if (!bch2_bkey_replicas_marked(c, btree_node_type(b), e.s_c)) { + if (!test_bit(BCH_FS_REBUILD_REPLICAS, &c->flags) && + !bch2_bkey_replicas_marked(c, btree_node_type(b), e.s_c)) { bch2_bkey_val_to_text(c, btree_node_type(b), buf, sizeof(buf), k); bch2_fs_bug(c, @@ -1713,7 +1714,8 @@ static void bch2_extent_debugcheck_extent(struct bch_fs *c, struct btree *b, return; } - if (!bch2_bkey_replicas_marked(c, btree_node_type(b), e.s_c)) { + if (!test_bit(BCH_FS_REBUILD_REPLICAS, &c->flags) && + !bch2_bkey_replicas_marked(c, btree_node_type(b), e.s_c)) { bch2_bkey_val_to_text(c, btree_node_type(b), buf, sizeof(buf), e.s_c); bch2_fs_bug(c, diff --git a/libbcachefs/fsck.c b/libbcachefs/fsck.c index e82e2723..be7ba064 100644 --- a/libbcachefs/fsck.c +++ b/libbcachefs/fsck.c @@ -1464,7 +1464,7 @@ static int bch2_fsck_walk_inodes_only(struct bch_fs *c) int bch2_fsck(struct bch_fs *c) { - if (!c->opts.nofsck) + if (c->opts.fsck) return bch2_fsck_full(c); if (!c->sb.clean && diff --git a/libbcachefs/journal_io.c b/libbcachefs/journal_io.c index 0cb1bc3c..f271da76 100644 --- a/libbcachefs/journal_io.c +++ b/libbcachefs/journal_io.c @@ -741,7 +741,8 @@ int bch2_journal_read(struct bch_fs *c, struct list_head *list) jlist.ret = 0; for_each_member_device(ca, c, iter) { - if (!(bch2_dev_has_data(c, ca) & (1 << BCH_DATA_JOURNAL))) + if (!test_bit(BCH_FS_REBUILD_REPLICAS, &c->flags) && + !(bch2_dev_has_data(c, ca) & (1 << BCH_DATA_JOURNAL))) continue; if ((ca->mi.state == BCH_MEMBER_STATE_RW || diff --git a/libbcachefs/opts.h b/libbcachefs/opts.h index 79b16fe7..81c66083 100644 --- a/libbcachefs/opts.h +++ b/libbcachefs/opts.h @@ -152,9 +152,9 @@ enum opt_type { BCH_OPT(journal_flush_disabled, u8, OPT_RUNTIME, \ OPT_BOOL(), \ NO_SB_OPT, false) \ - BCH_OPT(nofsck, u8, OPT_MOUNT, \ + BCH_OPT(fsck, u8, OPT_MOUNT, \ OPT_BOOL(), \ - NO_SB_OPT, false) \ + NO_SB_OPT, true) \ BCH_OPT(fix_errors, u8, OPT_MOUNT, \ OPT_BOOL(), \ NO_SB_OPT, false) \ diff --git a/libbcachefs/recovery.c b/libbcachefs/recovery.c index 2b053e61..902f39f6 100644 --- a/libbcachefs/recovery.c +++ b/libbcachefs/recovery.c @@ -151,7 +151,7 @@ int bch2_fs_recovery(struct bch_fs *c) bch_info(c, "recovering from clean shutdown, journal seq %llu", le64_to_cpu(clean->journal_seq)); - if (!clean || !c->opts.nofsck) { + if (!clean || c->opts.fsck) { ret = bch2_journal_read(c, &journal); if (ret) goto err; @@ -218,6 +218,8 @@ int bch2_fs_recovery(struct bch_fs *c) goto err; bch_verbose(c, "mark and sweep done"); + clear_bit(BCH_FS_REBUILD_REPLICAS, &c->flags); + if (c->opts.noreplay) goto out;