From 692eadd6ca9b45f12971126b326b6a89d7117e67 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Sat, 13 Jul 2019 13:06:42 -0400 Subject: [PATCH] Update bcachefs sources to 22776fe990 bcachefs: Convert some assertions to fsck errors --- .bcachefs_revision | 2 +- libbcachefs/buckets.c | 30 +++++++++++++++++++++++++----- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/.bcachefs_revision b/.bcachefs_revision index a2769342..31858ae6 100644 --- a/.bcachefs_revision +++ b/.bcachefs_revision @@ -1 +1 @@ -b5fff1521369ea311f577fe64da9df24be56b91e +22776fe9902b0b06d6aa18cd4c7f0c5ad35a95fa diff --git a/libbcachefs/buckets.c b/libbcachefs/buckets.c index b6b3ac51..81c3c313 100644 --- a/libbcachefs/buckets.c +++ b/libbcachefs/buckets.c @@ -846,8 +846,6 @@ static void bucket_set_stripe(struct bch_fs *c, struct bucket *g = PTR_BUCKET(ca, ptr, gc); struct bucket_mark new, old; - BUG_ON(ptr_stale(ca, ptr)); - old = bucket_data_cmpxchg(c, ca, fs_usage, g, new, ({ new.dirty = true; new.stripe = enabled; @@ -856,6 +854,26 @@ static void bucket_set_stripe(struct bch_fs *c, new.journal_seq = journal_seq; } })); + + /* + * XXX write repair code for these, flag stripe as possibly bad + */ + if (old.gen != ptr->gen) + bch2_fsck_err(c, FSCK_CAN_IGNORE|FSCK_NEED_FSCK, + "stripe with stale pointer"); +#if 0 + /* + * We'd like to check for these, but these checks don't work + * yet: + */ + if (old.stripe && enabled) + bch2_fsck_err(c, FSCK_CAN_IGNORE|FSCK_NEED_FSCK, + "multiple stripes using same bucket"); + + if (!old.stripe && !enabled) + bch2_fsck_err(c, FSCK_CAN_IGNORE|FSCK_NEED_FSCK, + "deleting stripe but bucket not marked as stripe bucket"); +#endif } } @@ -884,9 +902,11 @@ static bool bch2_mark_pointer(struct bch_fs *c, * checked the gen */ if (gen_after(new.gen, p.ptr.gen)) { - BUG_ON(!test_bit(BCH_FS_ALLOC_READ_DONE, &c->flags)); - EBUG_ON(!p.ptr.cached && - test_bit(JOURNAL_REPLAY_DONE, &c->journal.flags)); + /* XXX write repair code for this */ + if (!p.ptr.cached && + test_bit(JOURNAL_REPLAY_DONE, &c->journal.flags)) + bch2_fsck_err(c, FSCK_CAN_IGNORE|FSCK_NEED_FSCK, + "stale dirty pointer"); return true; }