return 1;
 }
 
-void *btree_lookup(struct btree_head *head, struct btree_geo *geo,
+static void *btree_lookup_node(struct btree_head *head, struct btree_geo *geo,
                unsigned long *key)
 {
        int i, height = head->height;
                if (!node)
                        return NULL;
        }
+       return node;
+}
 
+void *btree_lookup(struct btree_head *head, struct btree_geo *geo,
+               unsigned long *key)
+{
+       int i;
+       unsigned long *node;
+
+       node = btree_lookup_node(head, geo, key);
        if (!node)
                return NULL;
 
 int btree_update(struct btree_head *head, struct btree_geo *geo,
                 unsigned long *key, void *val)
 {
-       int i, height = head->height;
-       unsigned long *node = head->node;
-
-       if (height == 0)
-               return -ENOENT;
-
-       for ( ; height > 1; height--) {
-               for (i = 0; i < geo->no_pairs; i++)
-                       if (keycmp(geo, node, i, key) <= 0)
-                               break;
-               if (i == geo->no_pairs)
-                       return -ENOENT;
-               node = bval(geo, node, i);
-               if (!node)
-                       return -ENOENT;
-       }
+       int i;
+       unsigned long *node;
 
+       node = btree_lookup_node(head, geo, key);
        if (!node)
                return -ENOENT;