diff options
| author | Kent Overstreet <kent.overstreet@gmail.com> | 2022-01-12 01:14:47 -0500 |
|---|---|---|
| committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 17:09:23 -0400 |
| commit | 12ce5b7df1e0e432bcac22079e4493cab5cd8b23 (patch) | |
| tree | 26c734e453b9a614bc05dc7c42db3dd45affb479 /fs/bcachefs/btree_iter.c | |
| parent | f7b6ca23b6456b8b441b506ef977ff53972b35c2 (diff) | |
| download | linux-12ce5b7df1e0e432bcac22079e4493cab5cd8b23.tar.gz linux-12ce5b7df1e0e432bcac22079e4493cab5cd8b23.tar.bz2 linux-12ce5b7df1e0e432bcac22079e4493cab5cd8b23.zip | |
bcachefs: Btree key cache coherency
- Updates to non key cache iterators will now be transparently
redirected to the key cache for cached btrees.
- Except when creating new keys: then the update goes to underlying
btree
For for iterating over a cached btree to work, we need to ensure that if
a key exists in the key cache, it also exists in the btree - otherwise
the iterator code will skip past it and not check the key cache.
Otherwise, for consistency, all updates should go to the same place -
the key cache.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/btree_iter.c')
| -rw-r--r-- | fs/bcachefs/btree_iter.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index ff98024e76fc..c7ba6ce27007 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -2188,6 +2188,8 @@ struct bkey_i *__bch2_btree_trans_peek_updates(struct btree_iter *iter) break; if (bpos_cmp(i->k->k.p, iter->path->pos) < 0) continue; + if (i->key_cache_already_flushed) + continue; if (!ret || bpos_cmp(i->k->k.p, ret->k.p) < 0) ret = i->k; } |
