@@ -198,6 +198,10 @@ zfs_btree_create(zfs_btree_t *tree, int (*compar) (const void *, const void *),
198
198
zfs_btree_create_custom (tree , compar , size , BTREE_LEAF_SIZE );
199
199
}
200
200
201
+ static void *
202
+ zfs_btree_find_in_buf (zfs_btree_t * tree , uint8_t * buf , uint32_t nelems ,
203
+ const void * value , zfs_btree_index_t * where );
204
+
201
205
void
202
206
zfs_btree_create_custom (zfs_btree_t * tree ,
203
207
int (* compar ) (const void * , const void * ),
@@ -208,6 +212,7 @@ zfs_btree_create_custom(zfs_btree_t *tree,
208
212
ASSERT3U (size , <=, esize / 2 );
209
213
memset (tree , 0 , sizeof (* tree ));
210
214
tree -> bt_compar = compar ;
215
+ tree -> bt_find_in_buf = zfs_btree_find_in_buf ;
211
216
tree -> bt_elem_size = size ;
212
217
tree -> bt_leaf_size = lsize ;
213
218
tree -> bt_leaf_cap = P2ALIGN (esize / size , 2 );
@@ -303,7 +308,7 @@ zfs_btree_find(zfs_btree_t *tree, const void *value, zfs_btree_index_t *where)
303
308
* element in the last leaf, it's in the last leaf or
304
309
* it's not in the tree.
305
310
*/
306
- void * d = zfs_btree_find_in_buf (tree ,
311
+ void * d = tree -> bt_find_in_buf (tree ,
307
312
last_leaf -> btl_elems +
308
313
last_leaf -> btl_hdr .bth_first * size ,
309
314
last_leaf -> btl_hdr .bth_count , value , & idx );
@@ -327,7 +332,7 @@ zfs_btree_find(zfs_btree_t *tree, const void *value, zfs_btree_index_t *where)
327
332
for (node = (zfs_btree_core_t * )tree -> bt_root ; depth < tree -> bt_height ;
328
333
node = (zfs_btree_core_t * )node -> btc_children [child ], depth ++ ) {
329
334
ASSERT3P (node , != , NULL );
330
- void * d = zfs_btree_find_in_buf (tree , node -> btc_elems ,
335
+ void * d = tree -> bt_find_in_buf (tree , node -> btc_elems ,
331
336
node -> btc_hdr .bth_count , value , & idx );
332
337
EQUIV (d != NULL , !idx .bti_before );
333
338
if (d != NULL ) {
@@ -347,7 +352,7 @@ zfs_btree_find(zfs_btree_t *tree, const void *value, zfs_btree_index_t *where)
347
352
*/
348
353
zfs_btree_leaf_t * leaf = (depth == 0 ?
349
354
(zfs_btree_leaf_t * )tree -> bt_root : (zfs_btree_leaf_t * )node );
350
- void * d = zfs_btree_find_in_buf (tree , leaf -> btl_elems +
355
+ void * d = tree -> bt_find_in_buf (tree , leaf -> btl_elems +
351
356
leaf -> btl_hdr .bth_first * size ,
352
357
leaf -> btl_hdr .bth_count , value , & idx );
353
358
@@ -671,7 +676,7 @@ zfs_btree_insert_into_parent(zfs_btree_t *tree, zfs_btree_hdr_t *old_node,
671
676
zfs_btree_hdr_t * par_hdr = & parent -> btc_hdr ;
672
677
zfs_btree_index_t idx ;
673
678
ASSERT (zfs_btree_is_core (par_hdr ));
674
- VERIFY3P (zfs_btree_find_in_buf (tree , parent -> btc_elems ,
679
+ VERIFY3P (tree -> bt_find_in_buf (tree , parent -> btc_elems ,
675
680
par_hdr -> bth_count , buf , & idx ), = = , NULL );
676
681
ASSERT (idx .bti_before );
677
682
uint32_t offset = idx .bti_offset ;
@@ -897,7 +902,7 @@ zfs_btree_find_parent_idx(zfs_btree_t *tree, zfs_btree_hdr_t *hdr)
897
902
}
898
903
zfs_btree_index_t idx ;
899
904
zfs_btree_core_t * parent = hdr -> bth_parent ;
900
- VERIFY3P (zfs_btree_find_in_buf (tree , parent -> btc_elems ,
905
+ VERIFY3P (tree -> bt_find_in_buf (tree , parent -> btc_elems ,
901
906
parent -> btc_hdr .bth_count , buf , & idx ), = = , NULL );
902
907
ASSERT (idx .bti_before );
903
908
ASSERT3U (idx .bti_offset , <=, parent -> btc_hdr .bth_count );
0 commit comments