Skip to content

Commit 05ce3e7

Browse files
committed
btree: Add argument to btree creation functions for search function
This cleans up the code. Signed-off-by: Richard Yao <[email protected]>
1 parent 01cb1b9 commit 05ce3e7

File tree

8 files changed

+28
-27
lines changed

8 files changed

+28
-27
lines changed

cmd/zdb/zdb.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ sublivelist_verify_func(void *args, dsl_deadlist_entry_t *dle)
326326
int err;
327327
struct sublivelist_verify *sv = args;
328328

329-
zfs_btree_create(&sv->sv_pair, sublivelist_block_refcnt_compare,
329+
zfs_btree_create(&sv->sv_pair, sublivelist_block_refcnt_compare, NULL,
330330
sizeof (sublivelist_verify_block_refcnt_t));
331331

332332
err = bpobj_iterate_nofree(&dle->dle_bpobj, sublivelist_verify_blkptr,
@@ -390,7 +390,7 @@ sublivelist_verify_lightweight(void *args, dsl_deadlist_entry_t *dle)
390390
{
391391
(void) args;
392392
sublivelist_verify_t sv;
393-
zfs_btree_create(&sv.sv_leftover, livelist_block_compare,
393+
zfs_btree_create(&sv.sv_leftover, livelist_block_compare, NULL,
394394
sizeof (sublivelist_verify_block_t));
395395
int err = sublivelist_verify_func(&sv, dle);
396396
zfs_btree_clear(&sv.sv_leftover);
@@ -682,7 +682,7 @@ livelist_metaslab_validate(spa_t *spa)
682682
(void) printf("Verifying deleted livelist entries\n");
683683

684684
sublivelist_verify_t sv;
685-
zfs_btree_create(&sv.sv_leftover, livelist_block_compare,
685+
zfs_btree_create(&sv.sv_leftover, livelist_block_compare, NULL,
686686
sizeof (sublivelist_verify_block_t));
687687
iterate_deleted_livelists(spa, livelist_verify, &sv);
688688

@@ -716,7 +716,7 @@ livelist_metaslab_validate(spa_t *spa)
716716
mv.mv_start = m->ms_start;
717717
mv.mv_end = m->ms_start + m->ms_size;
718718
zfs_btree_create(&mv.mv_livelist_allocs,
719-
livelist_block_compare,
719+
livelist_block_compare, NULL,
720720
sizeof (sublivelist_verify_block_t));
721721

722722
mv_populate_livelist_allocs(&mv, &sv);

include/sys/btree.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,12 @@ typedef struct zfs_btree_index {
106106
} zfs_btree_index_t;
107107

108108
typedef struct btree zfs_btree_t;
109+
typedef void * (*bt_find_in_buf_f) (zfs_btree_t *, uint8_t *, uint32_t,
110+
const void *, zfs_btree_index_t *);
109111

110112
struct btree {
111113
int (*bt_compar) (const void *, const void *);
112-
void * (*bt_find_in_buf) (zfs_btree_t *, uint8_t *, uint32_t,
113-
const void *, zfs_btree_index_t *);
114+
bt_find_in_buf_f bt_find_in_buf;
114115
size_t bt_elem_size;
115116
size_t bt_leaf_size;
116117
uint32_t bt_leaf_cap;
@@ -171,9 +172,9 @@ void zfs_btree_fini(void);
171172
* lsize - custom leaf size
172173
*/
173174
void zfs_btree_create(zfs_btree_t *, int (*) (const void *, const void *),
174-
size_t);
175+
bt_find_in_buf_f, size_t);
175176
void zfs_btree_create_custom(zfs_btree_t *, int (*)(const void *, const void *),
176-
size_t, size_t);
177+
bt_find_in_buf_f, size_t, size_t);
177178

178179
/*
179180
* Find a node with a matching value in the tree. Returns the matching node

module/zfs/btree.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -193,9 +193,10 @@ zfs_btree_leaf_free(zfs_btree_t *tree, void *ptr)
193193

194194
void
195195
zfs_btree_create(zfs_btree_t *tree, int (*compar) (const void *, const void *),
196-
size_t size)
196+
bt_find_in_buf_f bt_find_in_buf, size_t size)
197197
{
198-
zfs_btree_create_custom(tree, compar, size, BTREE_LEAF_SIZE);
198+
zfs_btree_create_custom(tree, compar, bt_find_in_buf, size,
199+
BTREE_LEAF_SIZE);
199200
}
200201

201202
static void *
@@ -205,14 +206,16 @@ zfs_btree_find_in_buf(zfs_btree_t *tree, uint8_t *buf, uint32_t nelems,
205206
void
206207
zfs_btree_create_custom(zfs_btree_t *tree,
207208
int (*compar) (const void *, const void *),
209+
bt_find_in_buf_f bt_find_in_buf,
208210
size_t size, size_t lsize)
209211
{
210212
size_t esize = lsize - offsetof(zfs_btree_leaf_t, btl_elems);
211213

212214
ASSERT3U(size, <=, esize / 2);
213215
memset(tree, 0, sizeof (*tree));
214216
tree->bt_compar = compar;
215-
tree->bt_find_in_buf = zfs_btree_find_in_buf;
217+
tree->bt_find_in_buf = (bt_find_in_buf == NULL) ?
218+
zfs_btree_find_in_buf : bt_find_in_buf;
216219
tree->bt_elem_size = size;
217220
tree->bt_leaf_size = lsize;
218221
tree->bt_leaf_cap = P2ALIGN(esize / size, 2);

module/zfs/dsl_scan.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4213,8 +4213,8 @@ ext_size_create(range_tree_t *rt, void *arg)
42134213
(void) rt;
42144214
zfs_btree_t *size_tree = arg;
42154215

4216-
zfs_btree_create(size_tree, ext_size_compare, sizeof (uint64_t));
4217-
size_tree->bt_find_in_buf = ext_size_find_in_buf;
4216+
zfs_btree_create(size_tree, ext_size_compare, ext_size_find_in_buf,
4217+
sizeof (uint64_t));
42184218
}
42194219

42204220
static void

module/zfs/metaslab.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1430,24 +1430,22 @@ metaslab_rt_create(range_tree_t *rt, void *arg)
14301430

14311431
size_t size;
14321432
int (*compare) (const void *, const void *);
1433+
bt_find_in_buf_f bt_find;
14331434
switch (rt->rt_type) {
14341435
case RANGE_SEG32:
14351436
size = sizeof (range_seg32_t);
14361437
compare = metaslab_rangesize32_compare;
1437-
zfs_btree_create(size_tree, compare, size);
1438-
size_tree->bt_find_in_buf =
1439-
metaslab_rt_find_rangesize32_in_buf;
1438+
bt_find = metaslab_rt_find_rangesize32_in_buf;
14401439
break;
14411440
case RANGE_SEG64:
14421441
size = sizeof (range_seg64_t);
14431442
compare = metaslab_rangesize64_compare;
1444-
zfs_btree_create(size_tree, compare, size);
1445-
size_tree->bt_find_in_buf =
1446-
metaslab_rt_find_rangesize64_in_buf;
1443+
bt_find = metaslab_rt_find_rangesize64_in_buf;
14471444
break;
14481445
default:
14491446
panic("Invalid range seg type %d", rt->rt_type);
14501447
}
1448+
zfs_btree_create(size_tree, compare, bt_find, size);
14511449
mrap->mra_floor_shift = metaslab_by_size_min_shift;
14521450
}
14531451

module/zfs/range_tree.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -209,28 +209,27 @@ range_tree_create_gap(const range_tree_ops_t *ops, range_seg_type_t type,
209209
ASSERT3U(type, <=, RANGE_SEG_NUM_TYPES);
210210
size_t size;
211211
int (*compare) (const void *, const void *);
212+
bt_find_in_buf_f bt_find;
212213
switch (type) {
213214
case RANGE_SEG32:
214215
size = sizeof (range_seg32_t);
215216
compare = range_tree_seg32_compare;
216-
zfs_btree_create(&rt->rt_root, compare, size);
217-
rt->rt_root.bt_find_in_buf = range_tree_seg32_find_in_buf;
217+
bt_find = range_tree_seg32_find_in_buf;
218218
break;
219219
case RANGE_SEG64:
220220
size = sizeof (range_seg64_t);
221221
compare = range_tree_seg64_compare;
222-
zfs_btree_create(&rt->rt_root, compare, size);
223-
rt->rt_root.bt_find_in_buf = range_tree_seg64_find_in_buf;
222+
bt_find = range_tree_seg64_find_in_buf;
224223
break;
225224
case RANGE_SEG_GAP:
226225
size = sizeof (range_seg_gap_t);
227226
compare = range_tree_seg_gap_compare;
228-
zfs_btree_create(&rt->rt_root, compare, size);
229-
rt->rt_root.bt_find_in_buf = range_tree_seg_gap_find_in_buf;
227+
bt_find = range_tree_seg_gap_find_in_buf;
230228
break;
231229
default:
232230
panic("Invalid range seg type %d", type);
233231
}
232+
zfs_btree_create(&rt->rt_root, compare, bt_find, size);
234233

235234
rt->rt_ops = ops;
236235
rt->rt_gap = gap;

module/zfs/zap_micro.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@ mzap_open(objset_t *os, uint64_t obj, dmu_buf_t *db)
461461
* 62 entries before we have to add 2KB B-tree core node.
462462
*/
463463
zfs_btree_create_custom(&zap->zap_m.zap_tree, mze_compare,
464-
sizeof (mzap_ent_t), 512);
464+
NULL, sizeof (mzap_ent_t), 512);
465465

466466
zap_name_t *zn = zap_name_alloc(zap);
467467
for (uint16_t i = 0; i < zap->zap_m.zap_num_chunks; i++) {

tests/zfs-tests/cmd/btree_test.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,7 @@ main(int argc, char *argv[])
501501
srandom(seed);
502502

503503
zfs_btree_init();
504-
zfs_btree_create(&bt, zfs_btree_compare, sizeof (uint64_t));
504+
zfs_btree_create(&bt, zfs_btree_compare, NULL, sizeof (uint64_t));
505505

506506
/*
507507
* This runs the named negative test. None of them should

0 commit comments

Comments
 (0)