From 087e53c255b6fe8ec6b573acbdf12a555aae493b Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Tue, 20 Dec 2022 11:26:57 -0500 Subject: [PATCH] bcachefs: Bring back BTREE_ITER_CACHED_NOFILL Signed-off-by: Kent Overstreet --- fs/bcachefs/btree_iter.c | 6 ++++-- fs/bcachefs/btree_key_cache.c | 3 +-- fs/bcachefs/btree_types.h | 1 + 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index 5883bb42bc09f..b1580f6efb0f8 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -1581,7 +1581,8 @@ struct bkey_s_c bch2_btree_path_peek_slot(struct btree_path *path, struct bkey * EBUG_ON(ck && (path->btree_id != ck->key.btree_id || !bkey_eq(path->pos, ck->key.pos))); - EBUG_ON(!ck || !ck->valid); + if (!ck || !ck->valid) + return bkey_s_c_null; *u = ck->k->k; k = bkey_i_to_s_c(ck->k); @@ -1860,7 +1861,8 @@ struct bkey_s_c btree_trans_peek_key_cache(struct btree_iter *iter, struct bpos if (!iter->key_cache_path) iter->key_cache_path = bch2_path_get(trans, iter->btree_id, pos, iter->flags & BTREE_ITER_INTENT, 0, - iter->flags|BTREE_ITER_CACHED); + iter->flags|BTREE_ITER_CACHED| + BTREE_ITER_CACHED_NOFILL); iter->key_cache_path = bch2_btree_path_set_pos(trans, iter->key_cache_path, pos, iter->flags & BTREE_ITER_INTENT); diff --git a/fs/bcachefs/btree_key_cache.c b/fs/bcachefs/btree_key_cache.c index 0ae5d893a4f79..fc924fd242747 100644 --- a/fs/bcachefs/btree_key_cache.c +++ b/fs/bcachefs/btree_key_cache.c @@ -487,7 +487,7 @@ retry: path->l[0].lock_seq = ck->c.lock.state.seq; path->l[0].b = (void *) ck; fill: - if (!ck->valid) { + if (!ck->valid && !(flags & BTREE_ITER_CACHED_NOFILL)) { /* * Using the underscore version because we haven't set * path->uptodate yet: @@ -508,7 +508,6 @@ fill: set_bit(BKEY_CACHED_ACCESSED, &ck->flags); path->uptodate = BTREE_ITER_UPTODATE; - BUG_ON(!ck->valid); BUG_ON(btree_node_locked_type(path, 0) != btree_lock_want(path, 0)); return ret; diff --git a/fs/bcachefs/btree_types.h b/fs/bcachefs/btree_types.h index ae5a692d19248..cdb887abcfe16 100644 --- a/fs/bcachefs/btree_types.h +++ b/fs/bcachefs/btree_types.h @@ -207,6 +207,7 @@ struct btree_node_iter { #define BTREE_ITER_ALL_SNAPSHOTS (1 << 11) #define BTREE_ITER_FILTER_SNAPSHOTS (1 << 12) #define BTREE_ITER_NOPRESERVE (1 << 13) +#define BTREE_ITER_CACHED_NOFILL (1 << 14) enum btree_path_uptodate { BTREE_ITER_UPTODATE = 0, -- 2.30.2