summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2018-11-03 21:56:27 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2018-11-03 22:03:31 -0400
commit19005ecf086b1067362d907c185298d3a43e67e4 (patch)
tree625f189f5ff1f425f43dac49f574533652688acf
parent2ab2ab0f781ae750473763e8a042c900a982d399 (diff)
Update bcachefs sources to defaad6d47 bcachefs: Fix an assertion when rebuilding replicas
-rw-r--r--.bcachefs_revision2
-rw-r--r--libbcachefs/extents.c6
-rw-r--r--libbcachefs/fsck.c2
-rw-r--r--libbcachefs/journal_io.c3
-rw-r--r--libbcachefs/opts.h4
-rw-r--r--libbcachefs/recovery.c4
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;