bcachefs: Optimize __bch2_btree_node_iter_advance()
authorKent Overstreet <kent.overstreet@linux.dev>
Fri, 21 Oct 2022 21:37:42 +0000 (17:37 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:45 +0000 (17:09 -0400)
This replaces an expensive memmove() call with an open-coded version.

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

index e92737e..aa8508e 100644 (file)
@@ -1429,7 +1429,10 @@ static inline void __bch2_btree_node_iter_advance(struct btree_node_iter *iter,
        EBUG_ON(iter->data->k > iter->data->end);
 
        if (unlikely(__btree_node_iter_set_end(iter, 0))) {
-               bch2_btree_node_iter_set_drop(iter, iter->data);
+               /* avoid an expensive memmove call: */
+               iter->data[0] = iter->data[1];
+               iter->data[1] = iter->data[2];
+               iter->data[2] = (struct btree_node_iter_set) { 0, 0 };
                return;
        }