What is interesting is the following commit modifies range_tree_clear() so it performs a zero size check and returns before calling range_tree_find_impl(). This commit is not in 18.10 and 19.04 Ubuntu ZFS releases.
I'm not sure why this check was added, but I guess it handles the cases were zero sized allocations are allowed and stops these from doing any unnecessary clearing and avoids the assertion. But the semantics change is not clear in the commit message.
What is interesting is the following commit modifies range_tree_clear() so it performs a zero size check and returns before calling range_tree_ find_impl( ). This commit is not in 18.10 and 19.04 Ubuntu ZFS releases.
commit a1d477c
Author: Matthew Ahrens <email address hidden>
Date: Thu Sep 22 09:30:13 2016 -0700
OpenZFS 7614, 9064 - zfs device evacuation/removal
OpenZFS 7614 - zfs device evacuation/removal
OpenZFS 9064 - remove_mirror should wait for device removal to complete
the specific change is:
@@ -560,6 +536,9 @@ range_tree_ clear(range_ tree_t *rt, uint64_t start, uint64_t size)
{
range_seg_t *rs;
+ if (size == 0) find_impl( rt, start, size)) != NULL) {
uint64_ t free_start = MAX(rs->rs_start, start);
uint64_ t free_end = MIN(rs->rs_end, start + size);
+ return;
+
while ((rs = range_tree_
I'm not sure why this check was added, but I guess it handles the cases were zero sized allocations are allowed and stops these from doing any unnecessary clearing and avoids the assertion. But the semantics change is not clear in the commit message.