bcachefs: Clean up bch2_extent_can_insert
authorKent Overstreet <kent.overstreet@gmail.com>
Thu, 21 Jan 2021 00:42:09 +0000 (19:42 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:51 +0000 (17:08 -0400)
It was using an internal btree node iterator interface, when
bch2_btree_iter_peek_slot() sufficed. We were hitting a null ptr deref
that looked like it was from the iterator not being uptodate - this will
also fix that.

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

index 1faca4bc182567c93a2c799fc418311786775ddc..5c43678e94a3173299ea62f5523d9407abd1d802 100644 (file)
@@ -192,18 +192,13 @@ bch2_extent_can_insert(struct btree_trans *trans,
                       struct btree_iter *iter,
                       struct bkey_i *insert)
 {
-       struct btree_iter_level *l = &iter->l[0];
-       struct btree_node_iter node_iter = l->iter;
-       struct bkey_packed *_k;
        struct bkey_s_c k;
-       struct bkey unpacked;
-       int sectors;
+       int ret, sectors;
 
-       _k = bch2_btree_node_iter_peek(&node_iter, l->b);
-       if (!_k)
-               return BTREE_INSERT_OK;
-
-       k = bkey_disassemble(l->b, _k, &unpacked);
+       k = bch2_btree_iter_peek_slot(iter);
+       ret = bkey_err(k);
+       if (ret)
+               return ret;
 
        /* Check if we're splitting a compressed extent: */