bcachefs: Fix a null ptr deref during journal replay
authorKent Overstreet <kent.overstreet@gmail.com>
Sat, 4 Apr 2020 17:54:19 +0000 (13:54 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:38 +0000 (17:08 -0400)
We were calling bch2_extent_can_insert() incorrectly; it should only be
called when the extents-to-keys pass is running because that's when we
could be splitting a compressed extent. Calling bch2_extent_can_insert()
without passing in a disk reservation was causing a null ptr deref.

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

index 1e6675f68b4ac5047ae7eba657372dc1f0905106..b9283ced4cae6c0617b62cfce6564798c910f0b4 100644 (file)
@@ -309,7 +309,7 @@ btree_key_can_insert(struct btree_trans *trans,
        if (unlikely(btree_node_old_extent_overwrite(b)))
                return BTREE_INSERT_BTREE_NODE_FULL;
 
-       ret = !btree_node_is_extents(b)
+       ret = !(iter->flags & BTREE_ITER_IS_EXTENTS)
                ? BTREE_INSERT_OK
                : bch2_extent_can_insert(trans, iter, insert);
        if (ret)