]> www.infradead.org Git - users/willy/xarray.git/commitdiff
bcachefs: Fix btree key cache coherency during replay
authorKent Overstreet <kent.overstreet@linux.dev>
Mon, 11 Mar 2024 00:53:17 +0000 (20:53 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Thu, 14 Mar 2024 01:22:26 +0000 (21:22 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/btree_key_cache.c
fs/bcachefs/btree_update.c

index 74e52fd28abe584617d2d7ccd2c09b8a46db1603..8a71d43444b9425808ff1db86ec0fd296c9900ff 100644 (file)
@@ -380,9 +380,11 @@ static int btree_key_cache_fill(struct btree_trans *trans,
        struct bkey_i *new_k = NULL;
        int ret;
 
-       k = bch2_bkey_get_iter(trans, &iter, ck->key.btree_id, ck->key.pos,
-                              BTREE_ITER_KEY_CACHE_FILL|
-                              BTREE_ITER_CACHED_NOFILL);
+       bch2_trans_iter_init(trans, &iter, ck->key.btree_id, ck->key.pos,
+                            BTREE_ITER_KEY_CACHE_FILL|
+                            BTREE_ITER_CACHED_NOFILL);
+       iter.flags &= ~BTREE_ITER_WITH_JOURNAL;
+       k = bch2_btree_iter_peek_slot(&iter);
        ret = bkey_err(k);
        if (ret)
                goto err;
index 45994fbac6458e06c2846896e8c1d6679e4812e4..a4b40c1656a54b0a13c9f562d337827387a44b15 100644 (file)
@@ -452,7 +452,7 @@ bch2_trans_update_by_path(struct btree_trans *trans, btree_path_idx_t path_idx,
         * the key cache - but the key has to exist in the btree for that to
         * work:
         */
-       if (path->cached && bkey_deleted(&i->old_k))
+       if (path->cached && !i->old_btree_u64s)
                return flush_new_cached_update(trans, i, flags, ip);
 
        return 0;