Lines Matching full:rt

80 zfs_rs_copy(zfs_range_seg_t *src, zfs_range_seg_t *dest, zfs_range_tree_t *rt)  in zfs_rs_copy()  argument
82 ASSERT3U(rt->rt_type, <, ZFS_RANGE_SEG_NUM_TYPES); in zfs_rs_copy()
84 switch (rt->rt_type) { in zfs_rs_copy()
101 zfs_range_tree_stat_verify(zfs_range_tree_t *rt) in zfs_range_tree_stat_verify() argument
108 for (rs = zfs_btree_first(&rt->rt_root, &where); rs != NULL; in zfs_range_tree_stat_verify()
109 rs = zfs_btree_next(&rt->rt_root, &where, &where)) { in zfs_range_tree_stat_verify()
110 uint64_t size = zfs_rs_get_end(rs, rt) - in zfs_range_tree_stat_verify()
111 zfs_rs_get_start(rs, rt); in zfs_range_tree_stat_verify()
119 if (hist[i] != rt->rt_histogram[i]) { in zfs_range_tree_stat_verify()
122 (u_longlong_t)rt->rt_histogram[i]); in zfs_range_tree_stat_verify()
124 VERIFY3U(hist[i], ==, rt->rt_histogram[i]); in zfs_range_tree_stat_verify()
129 zfs_range_tree_stat_incr(zfs_range_tree_t *rt, zfs_range_seg_t *rs) in zfs_range_tree_stat_incr() argument
131 uint64_t size = zfs_rs_get_end(rs, rt) - zfs_rs_get_start(rs, rt); in zfs_range_tree_stat_incr()
136 sizeof (rt->rt_histogram) / sizeof (*rt->rt_histogram)); in zfs_range_tree_stat_incr()
138 rt->rt_histogram[idx]++; in zfs_range_tree_stat_incr()
139 ASSERT3U(rt->rt_histogram[idx], !=, 0); in zfs_range_tree_stat_incr()
143 zfs_range_tree_stat_decr(zfs_range_tree_t *rt, zfs_range_seg_t *rs) in zfs_range_tree_stat_decr() argument
145 uint64_t size = zfs_rs_get_end(rs, rt) - zfs_rs_get_start(rs, rt); in zfs_range_tree_stat_decr()
150 sizeof (rt->rt_histogram) / sizeof (*rt->rt_histogram)); in zfs_range_tree_stat_decr()
152 ASSERT3U(rt->rt_histogram[idx], !=, 0); in zfs_range_tree_stat_decr()
153 rt->rt_histogram[idx]--; in zfs_range_tree_stat_decr()
209 zfs_range_tree_t *rt = kmem_zalloc(sizeof (zfs_range_tree_t), KM_SLEEP); in ZFS_BTREE_FIND_IN_BUF_FUNC() local
235 zfs_btree_create(&rt->rt_root, compare, bt_find, size); in ZFS_BTREE_FIND_IN_BUF_FUNC()
237 rt->rt_ops = ops; in ZFS_BTREE_FIND_IN_BUF_FUNC()
238 rt->rt_gap = gap; in ZFS_BTREE_FIND_IN_BUF_FUNC()
239 rt->rt_flags = flags; in ZFS_BTREE_FIND_IN_BUF_FUNC()
240 rt->rt_name = name; in ZFS_BTREE_FIND_IN_BUF_FUNC()
241 rt->rt_arg = arg; in ZFS_BTREE_FIND_IN_BUF_FUNC()
242 rt->rt_type = type; in ZFS_BTREE_FIND_IN_BUF_FUNC()
243 rt->rt_start = start; in ZFS_BTREE_FIND_IN_BUF_FUNC()
244 rt->rt_shift = shift; in ZFS_BTREE_FIND_IN_BUF_FUNC()
246 if (rt->rt_ops != NULL && rt->rt_ops->rtop_create != NULL) in ZFS_BTREE_FIND_IN_BUF_FUNC()
247 rt->rt_ops->rtop_create(rt, rt->rt_arg); in ZFS_BTREE_FIND_IN_BUF_FUNC()
249 return (rt); in ZFS_BTREE_FIND_IN_BUF_FUNC()
279 zfs_range_tree_destroy(zfs_range_tree_t *rt) in zfs_range_tree_destroy() argument
281 VERIFY0(rt->rt_space); in zfs_range_tree_destroy()
283 if (rt->rt_ops != NULL && rt->rt_ops->rtop_destroy != NULL) in zfs_range_tree_destroy()
284 rt->rt_ops->rtop_destroy(rt, rt->rt_arg); in zfs_range_tree_destroy()
286 if (rt->rt_name != NULL && (rt->rt_flags & ZFS_RT_F_DYN_NAME)) in zfs_range_tree_destroy()
287 kmem_strfree((char *)(uintptr_t)rt->rt_name); in zfs_range_tree_destroy()
289 zfs_btree_destroy(&rt->rt_root); in zfs_range_tree_destroy()
290 kmem_free(rt, sizeof (*rt)); in zfs_range_tree_destroy()
294 zfs_range_tree_adjust_fill(zfs_range_tree_t *rt, zfs_range_seg_t *rs, in zfs_range_tree_adjust_fill() argument
297 if (delta < 0 && delta * -1 >= zfs_rs_get_fill(rs, rt)) { in zfs_range_tree_adjust_fill()
298 zfs_panic_recover("zfs: rt=%s: attempting to decrease fill to " in zfs_range_tree_adjust_fill()
300 ZFS_RT_NAME(rt), in zfs_range_tree_adjust_fill()
301 (longlong_t)zfs_rs_get_start(rs, rt), in zfs_range_tree_adjust_fill()
302 (longlong_t)zfs_rs_get_end(rs, rt)); in zfs_range_tree_adjust_fill()
304 if (zfs_rs_get_fill(rs, rt) + delta > zfs_rs_get_end(rs, rt) - in zfs_range_tree_adjust_fill()
305 zfs_rs_get_start(rs, rt)) { in zfs_range_tree_adjust_fill()
306 zfs_panic_recover("zfs: rt=%s: attempting to increase fill " in zfs_range_tree_adjust_fill()
308 ZFS_RT_NAME(rt), in zfs_range_tree_adjust_fill()
309 (longlong_t)zfs_rs_get_start(rs, rt), in zfs_range_tree_adjust_fill()
310 (longlong_t)zfs_rs_get_end(rs, rt)); in zfs_range_tree_adjust_fill()
313 if (rt->rt_ops != NULL && rt->rt_ops->rtop_remove != NULL) in zfs_range_tree_adjust_fill()
314 rt->rt_ops->rtop_remove(rt, rs, rt->rt_arg); in zfs_range_tree_adjust_fill()
315 zfs_rs_set_fill(rs, rt, zfs_rs_get_fill(rs, rt) + delta); in zfs_range_tree_adjust_fill()
316 if (rt->rt_ops != NULL && rt->rt_ops->rtop_add != NULL) in zfs_range_tree_adjust_fill()
317 rt->rt_ops->rtop_add(rt, rs, rt->rt_arg); in zfs_range_tree_adjust_fill()
323 zfs_range_tree_t *rt = arg; in zfs_range_tree_add_impl() local
327 uint64_t end = start + size, gap = rt->rt_gap; in zfs_range_tree_add_impl()
335 zfs_rs_set_start(&rsearch, rt, start); in zfs_range_tree_add_impl()
336 zfs_rs_set_end(&rsearch, rt, end); in zfs_range_tree_add_impl()
337 rs = zfs_btree_find(&rt->rt_root, &rsearch, &where); in zfs_range_tree_add_impl()
348 uint64_t rstart = zfs_rs_get_start(rs, rt); in zfs_range_tree_add_impl()
349 uint64_t rend = zfs_rs_get_end(rs, rt); in zfs_range_tree_add_impl()
351 zfs_panic_recover("zfs: rt=%s: adding segment " in zfs_range_tree_add_impl()
354 ZFS_RT_NAME(rt), in zfs_range_tree_add_impl()
360 zfs_range_tree_adjust_fill(rt, rs, fill); in zfs_range_tree_add_impl()
364 if (rt->rt_ops != NULL && rt->rt_ops->rtop_remove != NULL) in zfs_range_tree_add_impl()
365 rt->rt_ops->rtop_remove(rt, rs, rt->rt_arg); in zfs_range_tree_add_impl()
367 zfs_range_tree_stat_decr(rt, rs); in zfs_range_tree_add_impl()
368 rt->rt_space -= rend - rstart; in zfs_range_tree_add_impl()
370 fill += zfs_rs_get_fill(rs, rt); in zfs_range_tree_add_impl()
375 zfs_btree_remove(&rt->rt_root, rs); in zfs_range_tree_add_impl()
376 zfs_range_tree_add_impl(rt, start, size, fill); in zfs_range_tree_add_impl()
388 rs_before = zfs_btree_prev(&rt->rt_root, &where, &where_before); in zfs_range_tree_add_impl()
389 rs_after = zfs_btree_next(&rt->rt_root, &where, &where_after); in zfs_range_tree_add_impl()
391 merge_before = (rs_before != NULL && zfs_rs_get_end(rs_before, rt) >= in zfs_range_tree_add_impl()
393 merge_after = (rs_after != NULL && zfs_rs_get_start(rs_after, rt) <= in zfs_range_tree_add_impl()
397 bridge_size += start - zfs_rs_get_end(rs_before, rt); in zfs_range_tree_add_impl()
399 bridge_size += zfs_rs_get_start(rs_after, rt) - end; in zfs_range_tree_add_impl()
402 if (rt->rt_ops != NULL && rt->rt_ops->rtop_remove != NULL) { in zfs_range_tree_add_impl()
403 rt->rt_ops->rtop_remove(rt, rs_before, rt->rt_arg); in zfs_range_tree_add_impl()
404 rt->rt_ops->rtop_remove(rt, rs_after, rt->rt_arg); in zfs_range_tree_add_impl()
407 zfs_range_tree_stat_decr(rt, rs_before); in zfs_range_tree_add_impl()
408 zfs_range_tree_stat_decr(rt, rs_after); in zfs_range_tree_add_impl()
410 zfs_rs_copy(rs_after, &tmp, rt); in zfs_range_tree_add_impl()
411 uint64_t before_start = zfs_rs_get_start_raw(rs_before, rt); in zfs_range_tree_add_impl()
412 uint64_t before_fill = zfs_rs_get_fill(rs_before, rt); in zfs_range_tree_add_impl()
413 uint64_t after_fill = zfs_rs_get_fill(rs_after, rt); in zfs_range_tree_add_impl()
414 zfs_btree_remove_idx(&rt->rt_root, &where_before); in zfs_range_tree_add_impl()
420 rs_after = zfs_btree_find(&rt->rt_root, &tmp, &where_after); in zfs_range_tree_add_impl()
422 zfs_rs_set_start_raw(rs_after, rt, before_start); in zfs_range_tree_add_impl()
423 zfs_rs_set_fill(rs_after, rt, after_fill + before_fill + fill); in zfs_range_tree_add_impl()
426 if (rt->rt_ops != NULL && rt->rt_ops->rtop_remove != NULL) in zfs_range_tree_add_impl()
427 rt->rt_ops->rtop_remove(rt, rs_before, rt->rt_arg); in zfs_range_tree_add_impl()
429 zfs_range_tree_stat_decr(rt, rs_before); in zfs_range_tree_add_impl()
431 uint64_t before_fill = zfs_rs_get_fill(rs_before, rt); in zfs_range_tree_add_impl()
432 zfs_rs_set_end(rs_before, rt, end); in zfs_range_tree_add_impl()
433 zfs_rs_set_fill(rs_before, rt, before_fill + fill); in zfs_range_tree_add_impl()
436 if (rt->rt_ops != NULL && rt->rt_ops->rtop_remove != NULL) in zfs_range_tree_add_impl()
437 rt->rt_ops->rtop_remove(rt, rs_after, rt->rt_arg); in zfs_range_tree_add_impl()
439 zfs_range_tree_stat_decr(rt, rs_after); in zfs_range_tree_add_impl()
441 uint64_t after_fill = zfs_rs_get_fill(rs_after, rt); in zfs_range_tree_add_impl()
442 zfs_rs_set_start(rs_after, rt, start); in zfs_range_tree_add_impl()
443 zfs_rs_set_fill(rs_after, rt, after_fill + fill); in zfs_range_tree_add_impl()
448 zfs_rs_set_start(rs, rt, start); in zfs_range_tree_add_impl()
449 zfs_rs_set_end(rs, rt, end); in zfs_range_tree_add_impl()
450 zfs_rs_set_fill(rs, rt, fill); in zfs_range_tree_add_impl()
451 zfs_btree_add_idx(&rt->rt_root, rs, &where); in zfs_range_tree_add_impl()
455 ASSERT3U(zfs_rs_get_fill(rs, rt), <=, zfs_rs_get_end(rs, rt) - in zfs_range_tree_add_impl()
456 zfs_rs_get_start(rs, rt)); in zfs_range_tree_add_impl()
458 ASSERT3U(zfs_rs_get_fill(rs, rt), ==, zfs_rs_get_end(rs, rt) - in zfs_range_tree_add_impl()
459 zfs_rs_get_start(rs, rt)); in zfs_range_tree_add_impl()
462 if (rt->rt_ops != NULL && rt->rt_ops->rtop_add != NULL) in zfs_range_tree_add_impl()
463 rt->rt_ops->rtop_add(rt, rs, rt->rt_arg); in zfs_range_tree_add_impl()
465 zfs_range_tree_stat_incr(rt, rs); in zfs_range_tree_add_impl()
466 rt->rt_space += size + bridge_size; in zfs_range_tree_add_impl()
476 zfs_range_tree_remove_impl(zfs_range_tree_t *rt, uint64_t start, uint64_t size, in zfs_range_tree_remove_impl() argument
487 VERIFY3U(size, <=, rt->rt_space); in zfs_range_tree_remove_impl()
488 if (rt->rt_type == ZFS_RANGE_SEG64) in zfs_range_tree_remove_impl()
491 zfs_rs_set_start(&rsearch, rt, start); in zfs_range_tree_remove_impl()
492 zfs_rs_set_end(&rsearch, rt, end); in zfs_range_tree_remove_impl()
493 rs = zfs_btree_find(&rt->rt_root, &rsearch, &where); in zfs_range_tree_remove_impl()
497 zfs_panic_recover("zfs: rt=%s: removing nonexistent segment " in zfs_range_tree_remove_impl()
499 ZFS_RT_NAME(rt), (longlong_t)start, (longlong_t)size); in zfs_range_tree_remove_impl()
503 rstart = zfs_rs_get_start(rs, rt); in zfs_range_tree_remove_impl()
504 rend = zfs_rs_get_end(rs, rt); in zfs_range_tree_remove_impl()
512 if (rt->rt_gap != 0) { in zfs_range_tree_remove_impl()
514 if (zfs_rs_get_fill(rs, rt) == size) { in zfs_range_tree_remove_impl()
519 zfs_range_tree_adjust_fill(rt, rs, -size); in zfs_range_tree_remove_impl()
523 zfs_panic_recover("zfs: rt=%s: freeing partial segment " in zfs_range_tree_remove_impl()
526 ZFS_RT_NAME(rt), in zfs_range_tree_remove_impl()
534 panic("zfs: rt=%s: removing segment " in zfs_range_tree_remove_impl()
537 ZFS_RT_NAME(rt), in zfs_range_tree_remove_impl()
546 zfs_range_tree_stat_decr(rt, rs); in zfs_range_tree_remove_impl()
548 if (rt->rt_ops != NULL && rt->rt_ops->rtop_remove != NULL) in zfs_range_tree_remove_impl()
549 rt->rt_ops->rtop_remove(rt, rs, rt->rt_arg); in zfs_range_tree_remove_impl()
553 zfs_rs_set_start(&newseg, rt, end); in zfs_range_tree_remove_impl()
554 zfs_rs_set_end_raw(&newseg, rt, zfs_rs_get_end_raw(rs, rt)); in zfs_range_tree_remove_impl()
555 zfs_rs_set_fill(&newseg, rt, zfs_rs_get_end(rs, rt) - end); in zfs_range_tree_remove_impl()
556 zfs_range_tree_stat_incr(rt, &newseg); in zfs_range_tree_remove_impl()
559 zfs_rs_set_end(rs, rt, start); in zfs_range_tree_remove_impl()
561 zfs_rs_copy(rs, &rs_tmp, rt); in zfs_range_tree_remove_impl()
562 if (zfs_btree_next(&rt->rt_root, &where, &where) != NULL) in zfs_range_tree_remove_impl()
563 zfs_btree_add_idx(&rt->rt_root, &newseg, &where); in zfs_range_tree_remove_impl()
565 zfs_btree_add(&rt->rt_root, &newseg); in zfs_range_tree_remove_impl()
567 if (rt->rt_ops != NULL && rt->rt_ops->rtop_add != NULL) in zfs_range_tree_remove_impl()
568 rt->rt_ops->rtop_add(rt, &newseg, rt->rt_arg); in zfs_range_tree_remove_impl()
571 zfs_rs_set_end(rs, rt, start); in zfs_range_tree_remove_impl()
572 zfs_rs_copy(rs, &rs_tmp, rt); in zfs_range_tree_remove_impl()
575 zfs_rs_set_start(rs, rt, end); in zfs_range_tree_remove_impl()
576 zfs_rs_copy(rs, &rs_tmp, rt); in zfs_range_tree_remove_impl()
578 zfs_btree_remove_idx(&rt->rt_root, &where); in zfs_range_tree_remove_impl()
588 zfs_rs_set_fill_raw(rs, rt, zfs_rs_get_end_raw(rs, rt) - in zfs_range_tree_remove_impl()
589 zfs_rs_get_start_raw(rs, rt)); in zfs_range_tree_remove_impl()
590 zfs_range_tree_stat_incr(rt, &rs_tmp); in zfs_range_tree_remove_impl()
592 if (rt->rt_ops != NULL && rt->rt_ops->rtop_add != NULL) in zfs_range_tree_remove_impl()
593 rt->rt_ops->rtop_add(rt, &rs_tmp, rt->rt_arg); in zfs_range_tree_remove_impl()
596 rt->rt_space -= size; in zfs_range_tree_remove_impl()
606 zfs_range_tree_remove_fill(zfs_range_tree_t *rt, uint64_t start, uint64_t size) in zfs_range_tree_remove_fill() argument
608 zfs_range_tree_remove_impl(rt, start, size, B_TRUE); in zfs_range_tree_remove_fill()
612 zfs_range_tree_resize_segment(zfs_range_tree_t *rt, zfs_range_seg_t *rs, in zfs_range_tree_resize_segment() argument
615 int64_t delta = newsize - (zfs_rs_get_end(rs, rt) - in zfs_range_tree_resize_segment()
616 zfs_rs_get_start(rs, rt)); in zfs_range_tree_resize_segment()
618 zfs_range_tree_stat_decr(rt, rs); in zfs_range_tree_resize_segment()
619 if (rt->rt_ops != NULL && rt->rt_ops->rtop_remove != NULL) in zfs_range_tree_resize_segment()
620 rt->rt_ops->rtop_remove(rt, rs, rt->rt_arg); in zfs_range_tree_resize_segment()
622 zfs_rs_set_start(rs, rt, newstart); in zfs_range_tree_resize_segment()
623 zfs_rs_set_end(rs, rt, newstart + newsize); in zfs_range_tree_resize_segment()
625 zfs_range_tree_stat_incr(rt, rs); in zfs_range_tree_resize_segment()
626 if (rt->rt_ops != NULL && rt->rt_ops->rtop_add != NULL) in zfs_range_tree_resize_segment()
627 rt->rt_ops->rtop_add(rt, rs, rt->rt_arg); in zfs_range_tree_resize_segment()
629 rt->rt_space += delta; in zfs_range_tree_resize_segment()
633 zfs_range_tree_find_impl(zfs_range_tree_t *rt, uint64_t start, uint64_t size) in zfs_range_tree_find_impl() argument
640 zfs_rs_set_start(&rsearch, rt, start); in zfs_range_tree_find_impl()
641 zfs_rs_set_end(&rsearch, rt, end); in zfs_range_tree_find_impl()
642 return (zfs_btree_find(&rt->rt_root, &rsearch, NULL)); in zfs_range_tree_find_impl()
646 zfs_range_tree_find(zfs_range_tree_t *rt, uint64_t start, uint64_t size) in zfs_range_tree_find() argument
648 if (rt->rt_type == ZFS_RANGE_SEG64) in zfs_range_tree_find()
651 zfs_range_seg_t *rs = zfs_range_tree_find_impl(rt, start, size); in zfs_range_tree_find()
652 if (rs != NULL && zfs_rs_get_start(rs, rt) <= start && in zfs_range_tree_find()
653 zfs_rs_get_end(rs, rt) >= start + size) { in zfs_range_tree_find()
660 zfs_range_tree_verify_not_present(zfs_range_tree_t *rt, uint64_t off, in zfs_range_tree_verify_not_present() argument
663 zfs_range_seg_t *rs = zfs_range_tree_find(rt, off, size); in zfs_range_tree_verify_not_present()
669 zfs_range_tree_contains(zfs_range_tree_t *rt, uint64_t start, uint64_t size) in zfs_range_tree_contains() argument
671 return (zfs_range_tree_find(rt, start, size) != NULL); in zfs_range_tree_contains()
680 zfs_range_tree_find_in(zfs_range_tree_t *rt, uint64_t start, uint64_t size, in zfs_range_tree_find_in() argument
683 if (rt->rt_type == ZFS_RANGE_SEG64) in zfs_range_tree_find_in()
687 zfs_rs_set_start(&rsearch, rt, start); in zfs_range_tree_find_in()
688 zfs_rs_set_end_raw(&rsearch, rt, zfs_rs_get_start_raw(&rsearch, rt) + in zfs_range_tree_find_in()
692 zfs_range_seg_t *rs = zfs_btree_find(&rt->rt_root, &rsearch, &where); in zfs_range_tree_find_in()
695 *osize = MIN(size, zfs_rs_get_end(rs, rt) - start); in zfs_range_tree_find_in()
699 rs = zfs_btree_next(&rt->rt_root, &where, &where); in zfs_range_tree_find_in()
700 if (rs == NULL || zfs_rs_get_start(rs, rt) >= start + size) in zfs_range_tree_find_in()
703 *ostart = zfs_rs_get_start(rs, rt); in zfs_range_tree_find_in()
704 *osize = MIN(start + size, zfs_rs_get_end(rs, rt)) - in zfs_range_tree_find_in()
705 zfs_rs_get_start(rs, rt); in zfs_range_tree_find_in()
714 zfs_range_tree_clear(zfs_range_tree_t *rt, uint64_t start, uint64_t size) in zfs_range_tree_clear() argument
721 if (rt->rt_type == ZFS_RANGE_SEG64) in zfs_range_tree_clear()
724 while ((rs = zfs_range_tree_find_impl(rt, start, size)) != NULL) { in zfs_range_tree_clear()
725 uint64_t free_start = MAX(zfs_rs_get_start(rs, rt), start); in zfs_range_tree_clear()
726 uint64_t free_end = MIN(zfs_rs_get_end(rs, rt), start + size); in zfs_range_tree_clear()
727 zfs_range_tree_remove(rt, free_start, free_end - free_start); in zfs_range_tree_clear()
734 zfs_range_tree_t *rt; in zfs_range_tree_swap() local
739 rt = *rtsrc; in zfs_range_tree_swap()
741 *rtdst = rt; in zfs_range_tree_swap()
745 zfs_range_tree_vacate(zfs_range_tree_t *rt, zfs_range_tree_func_t *func, in zfs_range_tree_vacate() argument
748 if (rt->rt_ops != NULL && rt->rt_ops->rtop_vacate != NULL) in zfs_range_tree_vacate()
749 rt->rt_ops->rtop_vacate(rt, rt->rt_arg); in zfs_range_tree_vacate()
755 while ((rs = zfs_btree_destroy_nodes(&rt->rt_root, &cookie)) != in zfs_range_tree_vacate()
757 func(arg, zfs_rs_get_start(rs, rt), in zfs_range_tree_vacate()
758 zfs_rs_get_end(rs, rt) - zfs_rs_get_start(rs, rt)); in zfs_range_tree_vacate()
761 zfs_btree_clear(&rt->rt_root); in zfs_range_tree_vacate()
764 memset(rt->rt_histogram, 0, sizeof (rt->rt_histogram)); in zfs_range_tree_vacate()
765 rt->rt_space = 0; in zfs_range_tree_vacate()
769 zfs_range_tree_walk(zfs_range_tree_t *rt, zfs_range_tree_func_t *func, in zfs_range_tree_walk() argument
773 for (zfs_range_seg_t *rs = zfs_btree_first(&rt->rt_root, &where); in zfs_range_tree_walk()
774 rs != NULL; rs = zfs_btree_next(&rt->rt_root, &where, &where)) { in zfs_range_tree_walk()
775 func(arg, zfs_rs_get_start(rs, rt), zfs_rs_get_end(rs, rt) - in zfs_range_tree_walk()
776 zfs_rs_get_start(rs, rt)); in zfs_range_tree_walk()
781 zfs_range_tree_first(zfs_range_tree_t *rt) in zfs_range_tree_first() argument
783 return (zfs_btree_first(&rt->rt_root, NULL)); in zfs_range_tree_first()
787 zfs_range_tree_space(zfs_range_tree_t *rt) in zfs_range_tree_space() argument
789 return (rt->rt_space); in zfs_range_tree_space()
793 zfs_range_tree_numsegs(zfs_range_tree_t *rt) in zfs_range_tree_numsegs() argument
795 return ((rt == NULL) ? 0 : zfs_btree_numnodes(&rt->rt_root)); in zfs_range_tree_numsegs()
799 zfs_range_tree_is_empty(zfs_range_tree_t *rt) in zfs_range_tree_is_empty() argument
801 ASSERT(rt != NULL); in zfs_range_tree_is_empty()
802 return (zfs_range_tree_space(rt) == 0); in zfs_range_tree_is_empty()
881 * For each entry in rt, if it exists in removefrom, remove it
885 zfs_range_tree_remove_xor_add(zfs_range_tree_t *rt, in zfs_range_tree_remove_xor_add() argument
889 for (zfs_range_seg_t *rs = zfs_btree_first(&rt->rt_root, &where); rs; in zfs_range_tree_remove_xor_add()
890 rs = zfs_btree_next(&rt->rt_root, &where, &where)) { in zfs_range_tree_remove_xor_add()
891 zfs_range_tree_remove_xor_add_segment(zfs_rs_get_start(rs, rt), in zfs_range_tree_remove_xor_add()
892 zfs_rs_get_end(rs, rt), removefrom, addto); in zfs_range_tree_remove_xor_add()
897 zfs_range_tree_min(zfs_range_tree_t *rt) in zfs_range_tree_min() argument
899 zfs_range_seg_t *rs = zfs_btree_first(&rt->rt_root, NULL); in zfs_range_tree_min()
900 return (rs != NULL ? zfs_rs_get_start(rs, rt) : 0); in zfs_range_tree_min()
904 zfs_range_tree_max(zfs_range_tree_t *rt) in zfs_range_tree_max() argument
906 zfs_range_seg_t *rs = zfs_btree_last(&rt->rt_root, NULL); in zfs_range_tree_max()
907 return (rs != NULL ? zfs_rs_get_end(rs, rt) : 0); in zfs_range_tree_max()
911 zfs_range_tree_span(zfs_range_tree_t *rt) in zfs_range_tree_span() argument
913 return (zfs_range_tree_max(rt) - zfs_range_tree_min(rt)); in zfs_range_tree_span()