From 742dbbdbb90efb786f05a8576917fcd0e9cbd57e Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Sat, 24 Oct 2020 21:21:56 -0400 Subject: [PATCH] Update bcachefs sources to 8436db7aac bcachefs: Drop alloc keys from journal when -o reconstruct_alloc --- .bcachefs_revision | 2 +- libbcachefs/recovery.c | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/.bcachefs_revision b/.bcachefs_revision index ace0a293..dc226f84 100644 --- a/.bcachefs_revision +++ b/.bcachefs_revision @@ -1 +1 @@ -13bb4cdf89c91a1e50d2416ede10c1f9cbaf0202 +8436db7aac9ced2118bf19b8f1bf3682f479d17e diff --git a/libbcachefs/recovery.c b/libbcachefs/recovery.c index d70fa968..32fed6b8 100644 --- a/libbcachefs/recovery.c +++ b/libbcachefs/recovery.c @@ -25,6 +25,18 @@ #define QSTR(n) { { { .len = strlen(n) } }, .name = n } +/* for -o reconstruct_alloc: */ +static void drop_alloc_keys(struct journal_keys *keys) +{ + size_t src, dst; + + for (src = 0, dst = 0; src < keys->nr; src++) + if (keys->d[src].btree_id != BTREE_ID_ALLOC) + keys->d[dst++] = keys->d[src]; + + keys->nr = dst; +} + /* iterate over keys read from the journal: */ static struct journal_key *journal_key_search(struct journal_keys *journal_keys, @@ -930,7 +942,6 @@ static int read_btree_roots(struct bch_fs *c) continue; } - if (r->error) { __fsck_err(c, i == BTREE_ID_ALLOC ? FSCK_CAN_IGNORE : 0, @@ -1027,6 +1038,11 @@ int bch2_fs_recovery(struct bch_fs *c) goto err; } + if (c->opts.reconstruct_alloc) { + c->sb.compat &= ~(1ULL << BCH_COMPAT_FEAT_ALLOC_INFO); + drop_alloc_keys(&c->journal_keys); + } + ret = journal_replay_early(c, clean, &c->journal_entries); if (ret) goto err;