summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/fs/zfs/range_tree.c
diff options
context:
space:
mode:
authorMatthew Ahrens <mahrens@delphix.com>2018-02-26 15:33:55 -0800
committerPrakash Surya <prakash.surya@delphix.com>2018-06-01 09:22:51 -0700
commitcfd63e1b1bcf7ba4bf72f55ddbd87ce008d2986d (patch)
treec46ed18864ee12aa0198b0fd7f579cea39e544dc /usr/src/uts/common/fs/zfs/range_tree.c
parentc7a7b2fa084facd68c3d1e860dfabe20c713877b (diff)
downloadillumos-joyent-cfd63e1b1bcf7ba4bf72f55ddbd87ce008d2986d.tar.gz
9486 reduce memory used by device removal on fragmented pools
Reviewed by: George Wilson <george.wilson@delphix.com> Reviewed by: Serapheim Dimitropoulos <serapheim.dimitro@delphix.com> Reviewed by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed by: Tim Chase <tim@chase2k.com> Approved by: Robert Mustacchi <rm@joyent.com>
Diffstat (limited to 'usr/src/uts/common/fs/zfs/range_tree.c')
-rw-r--r--usr/src/uts/common/fs/zfs/range_tree.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/usr/src/uts/common/fs/zfs/range_tree.c b/usr/src/uts/common/fs/zfs/range_tree.c
index 7c6ce90e18..a0b9e5f9a1 100644
--- a/usr/src/uts/common/fs/zfs/range_tree.c
+++ b/usr/src/uts/common/fs/zfs/range_tree.c
@@ -298,7 +298,6 @@ range_tree_remove(void *arg, uint64_t start, uint64_t size)
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;
@@ -306,7 +305,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));
}
static range_seg_t *
@@ -407,3 +406,23 @@ range_tree_is_empty(range_tree_t *rt)
ASSERT(rt != NULL);
return (range_tree_space(rt) == 0);
}
+
+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));
+}