summaryrefslogtreecommitdiffstats
path: root/fs/bcachefs/recovery.h
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2019-12-27 20:51:35 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-22 17:08:35 -0400
commit5c4a5cd5b379567f648c0f5d0f9ec7550bc8b67e (patch)
tree4dd2c2474f8cd221d1333e1c07082cb2fad4dc10 /fs/bcachefs/recovery.h
parent8b53852d0a80ec4e438205bf8eb3a5a73ee8238c (diff)
downloadlinux-5c4a5cd5b379567f648c0f5d0f9ec7550bc8b67e.tar.gz
linux-5c4a5cd5b379567f648c0f5d0f9ec7550bc8b67e.tar.bz2
linux-5c4a5cd5b379567f648c0f5d0f9ec7550bc8b67e.zip
bcachefs: btree_and_journal_iter
Introduce a new iterator that iterates over keys in the btree with keys from the journal overlaid on top. This factors out what the erasure coding init code was doing manually. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/recovery.h')
-rw-r--r--fs/bcachefs/recovery.h26
1 files changed, 22 insertions, 4 deletions
diff --git a/fs/bcachefs/recovery.h b/fs/bcachefs/recovery.h
index 479ea46f8dcb..ccd84a8fe60d 100644
--- a/fs/bcachefs/recovery.h
+++ b/fs/bcachefs/recovery.h
@@ -24,10 +24,28 @@ struct journal_iter {
enum btree_id btree_id;
};
-struct journal_iter bch2_journal_iter_init(struct journal_keys *,
- enum btree_id);
-struct bkey_s_c bch2_journal_iter_peek(struct journal_iter *);
-struct bkey_s_c bch2_journal_iter_next(struct journal_iter *);
+struct btree_and_journal_iter {
+ enum btree_id btree_id;
+
+ struct btree_iter *btree;
+ struct journal_iter journal;
+
+ enum last_key_returned {
+ none,
+ btree,
+ journal,
+ } last;
+};
+
+void bch2_btree_and_journal_iter_advance(struct btree_and_journal_iter *);
+struct bkey_s_c bch2_btree_and_journal_iter_peek(struct btree_and_journal_iter *);
+struct bkey_s_c bch2_btree_and_journal_iter_next(struct btree_and_journal_iter *);
+struct journal_key *journal_key_search(struct journal_keys *,
+ enum btree_id, struct bpos);
+void bch2_btree_and_journal_iter_init(struct btree_and_journal_iter *,
+ struct btree_trans *,
+ struct journal_keys *,
+ enum btree_id, struct bpos);
int bch2_fs_recovery(struct bch_fs *);
int bch2_fs_initialize(struct bch_fs *);