301         range_seg_t rsearch;
 302         uint64_t end = start + size;
 303 
 304         VERIFY(size != 0);
 305 
 306         rsearch.rs_start = start;
 307         rsearch.rs_end = end;
 308         return (avl_find(&rt->rt_root, &rsearch, NULL));
 309 }
 310 
 311 static range_seg_t *
 312 range_tree_find(range_tree_t *rt, uint64_t start, uint64_t size)
 313 {
 314         range_seg_t *rs = range_tree_find_impl(rt, start, size);
 315         if (rs != NULL && rs->rs_start <= start && rs->rs_end >= start + size)
 316                 return (rs);
 317         return (NULL);
 318 }
 319 
 320 void
 321 range_tree_verify(range_tree_t *rt, uint64_t off, uint64_t size)
 322 {
 323         range_seg_t *rs;
 324 
 325         rs = range_tree_find(rt, off, size);
 326         if (rs != NULL)
 327                 panic("freeing free block; rs=%p", (void *)rs);
 328 }
 329 
 330 boolean_t
 331 range_tree_contains(range_tree_t *rt, uint64_t start, uint64_t size)
 332 {
 333         return (range_tree_find(rt, start, size) != NULL);
 334 }
 335 
 336 /*
 337  * Ensure that this range is not in the tree, regardless of whether
 338  * it is currently in the tree.
 339  */
 340 void
 341 range_tree_clear(range_tree_t *rt, uint64_t start, uint64_t size)
 342 {
 343         range_seg_t *rs;
 344 
 345         if (size == 0)
 346                 return;
 347 
 
 | 
 
 
 301         range_seg_t rsearch;
 302         uint64_t end = start + size;
 303 
 304         VERIFY(size != 0);
 305 
 306         rsearch.rs_start = start;
 307         rsearch.rs_end = end;
 308         return (avl_find(&rt->rt_root, &rsearch, NULL));
 309 }
 310 
 311 static range_seg_t *
 312 range_tree_find(range_tree_t *rt, uint64_t start, uint64_t size)
 313 {
 314         range_seg_t *rs = range_tree_find_impl(rt, start, size);
 315         if (rs != NULL && rs->rs_start <= start && rs->rs_end >= start + size)
 316                 return (rs);
 317         return (NULL);
 318 }
 319 
 320 void
 321 range_tree_verify_not_present(range_tree_t *rt, uint64_t off, uint64_t size)
 322 {
 323         range_seg_t *rs = range_tree_find(rt, off, size);
 324         if (rs != NULL)
 325                 panic("segment already in tree; rs=%p", (void *)rs);
 326 }
 327 
 328 boolean_t
 329 range_tree_contains(range_tree_t *rt, uint64_t start, uint64_t size)
 330 {
 331         return (range_tree_find(rt, start, size) != NULL);
 332 }
 333 
 334 /*
 335  * Ensure that this range is not in the tree, regardless of whether
 336  * it is currently in the tree.
 337  */
 338 void
 339 range_tree_clear(range_tree_t *rt, uint64_t start, uint64_t size)
 340 {
 341         range_seg_t *rs;
 342 
 343         if (size == 0)
 344                 return;
 345 
 
 |