]> www.infradead.org Git - nvme.git/commitdiff
bcachefs: backpointer_get_key: check for null from peek_slot()
authorKent Overstreet <kent.overstreet@linux.dev>
Wed, 2 Apr 2025 16:54:25 +0000 (12:54 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Thu, 3 Apr 2025 16:11:43 +0000 (12:11 -0400)
peek_slot() doesn't normally return bkey_s_c_null - except when we ask
for a key at a btree level that doesn't exist, which can happen here.

We might want to revisit this, but we'll have to look over all the
places where we use peek_slot() on interior nodes.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/backpointers.c

index dc1cd8de18ac83ec88530243a806c4c4e9a10d3f..ff26bb515150046e524e6cb8e10b75e104d6d862 100644 (file)
@@ -258,6 +258,18 @@ struct bkey_s_c bch2_backpointer_get_key(struct btree_trans *trans,
                return k;
        }
 
+       /*
+        * peek_slot() doesn't normally return NULL - except when we ask for a
+        * key at a btree level that doesn't exist.
+        *
+        * We may want to revisit this and change peek_slot():
+        */
+       if (!k.k) {
+               bkey_init(&iter->k);
+               iter->k.p = bp.v->pos;
+               k.k = &iter->k;
+       }
+
        if (k.k &&
            extent_matches_bp(c, bp.v->btree_id, bp.v->level, k, bp))
                return k;