aboutsummaryrefslogtreecommitdiff
path: root/module/zfs/range_tree.c
diff options
context:
space:
mode:
authorMatthew Ahrens <mahrens@delphix.com>2018-02-26 23:33:55 +0000
committerBrian Behlendorf <behlendorf1@llnl.gov>2018-05-24 17:18:07 +0000
commit0dc2f70c5cece6ef2474e14552111ae098d9f5b4 (patch)
tree8414edcb42c28aecbc4e9422eb02d15d7e98d035 /module/zfs/range_tree.c
parentba863d0be4cbfbea938b10e49fb6ff459ac9ec20 (diff)
downloadsrc-0dc2f70c5cece6ef2474e14552111ae098d9f5b4.tar.gz
src-0dc2f70c5cece6ef2474e14552111ae098d9f5b4.zip
Diffstat (limited to 'module/zfs/range_tree.c')
-rw-r--r--module/zfs/range_tree.c30
1 files changed, 28 insertions, 2 deletions
diff --git a/module/zfs/range_tree.c b/module/zfs/range_tree.c
index baa655d39a59..448d00c1e5d4 100644
--- a/module/zfs/range_tree.c
+++ b/module/zfs/range_tree.c
@@ -491,7 +491,6 @@ range_tree_resize_segment(range_tree_t *rt, range_seg_t *rs,
static range_seg_t *
range_tree_find_impl(range_tree_t *rt, uint64_t start, uint64_t size)
{
- avl_index_t where;
range_seg_t rsearch;
uint64_t end = start + size;
@@ -499,7 +498,7 @@ range_tree_find_impl(range_tree_t *rt, uint64_t start, uint64_t size)
rsearch.rs_start = start;
rsearch.rs_end = end;
- return (avl_find(&rt->rt_root, &rsearch, &where));
+ return (avl_find(&rt->rt_root, &rsearch, NULL));
}
range_seg_t *
@@ -599,6 +598,13 @@ range_tree_space(range_tree_t *rt)
return (rt->rt_space);
}
+boolean_t
+range_tree_is_empty(range_tree_t *rt)
+{
+ ASSERT(rt != NULL);
+ return (range_tree_space(rt) == 0);
+}
+
/* Generic range tree functions for maintaining segments in an AVL tree. */
void
rt_avl_create(range_tree_t *rt, void *arg)
@@ -643,3 +649,23 @@ rt_avl_vacate(range_tree_t *rt, void *arg)
*/
rt_avl_create(rt, arg);
}
+
+uint64_t
+range_tree_min(range_tree_t *rt)
+{
+ range_seg_t *rs = avl_first(&rt->rt_root);
+ return (rs != NULL ? rs->rs_start : 0);
+}
+
+uint64_t
+range_tree_max(range_tree_t *rt)
+{
+ range_seg_t *rs = avl_last(&rt->rt_root);
+ return (rs != NULL ? rs->rs_end : 0);
+}
+
+uint64_t
+range_tree_span(range_tree_t *rt)
+{
+ return (range_tree_max(rt) - range_tree_min(rt));
+}