diff options
| author | Matthew Ahrens <mahrens@delphix.com> | 2018-02-26 15:33:55 -0800 |
|---|---|---|
| committer | Prakash Surya <prakash.surya@delphix.com> | 2018-06-01 09:22:51 -0700 |
| commit | cfd63e1b1bcf7ba4bf72f55ddbd87ce008d2986d (patch) | |
| tree | c46ed18864ee12aa0198b0fd7f579cea39e544dc /usr/src/uts/common/fs/zfs/range_tree.c | |
| parent | c7a7b2fa084facd68c3d1e860dfabe20c713877b (diff) | |
| download | illumos-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.c | 23 |
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)); +} |
