mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-24 11:18:52 +03:00
Linux 6.12 compat: Rename range_tree_* to zfs_range_tree_*
Linux 6.12 has conflicting range_tree_{find,destroy,clear} symbols.
Signed-off-by: Ivan Volosyuk <Ivan.Volosyuk@gmail.com>
Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Reviewed-by: Rob Norris <robn@despairlabs.com>
This commit is contained in:
committed by
Tony Hutter
parent
db62886d98
commit
d4a5a7e3aa
+85
-80
@@ -369,12 +369,13 @@ spa_vdev_removal_create(vdev_t *vd)
|
||||
spa_vdev_removal_t *svr = kmem_zalloc(sizeof (*svr), KM_SLEEP);
|
||||
mutex_init(&svr->svr_lock, NULL, MUTEX_DEFAULT, NULL);
|
||||
cv_init(&svr->svr_cv, NULL, CV_DEFAULT, NULL);
|
||||
svr->svr_allocd_segs = range_tree_create(NULL, RANGE_SEG64, NULL, 0, 0);
|
||||
svr->svr_allocd_segs = zfs_range_tree_create(NULL, ZFS_RANGE_SEG64,
|
||||
NULL, 0, 0);
|
||||
svr->svr_vdev_id = vd->vdev_id;
|
||||
|
||||
for (int i = 0; i < TXG_SIZE; i++) {
|
||||
svr->svr_frees[i] = range_tree_create(NULL, RANGE_SEG64, NULL,
|
||||
0, 0);
|
||||
svr->svr_frees[i] = zfs_range_tree_create(NULL, ZFS_RANGE_SEG64,
|
||||
NULL, 0, 0);
|
||||
list_create(&svr->svr_new_segments[i],
|
||||
sizeof (vdev_indirect_mapping_entry_t),
|
||||
offsetof(vdev_indirect_mapping_entry_t, vime_node));
|
||||
@@ -389,11 +390,11 @@ spa_vdev_removal_destroy(spa_vdev_removal_t *svr)
|
||||
for (int i = 0; i < TXG_SIZE; i++) {
|
||||
ASSERT0(svr->svr_bytes_done[i]);
|
||||
ASSERT0(svr->svr_max_offset_to_sync[i]);
|
||||
range_tree_destroy(svr->svr_frees[i]);
|
||||
zfs_range_tree_destroy(svr->svr_frees[i]);
|
||||
list_destroy(&svr->svr_new_segments[i]);
|
||||
}
|
||||
|
||||
range_tree_destroy(svr->svr_allocd_segs);
|
||||
zfs_range_tree_destroy(svr->svr_allocd_segs);
|
||||
mutex_destroy(&svr->svr_lock);
|
||||
cv_destroy(&svr->svr_cv);
|
||||
kmem_free(svr, sizeof (*svr));
|
||||
@@ -475,11 +476,11 @@ vdev_remove_initiate_sync(void *arg, dmu_tx_t *tx)
|
||||
* be copied.
|
||||
*/
|
||||
spa->spa_removing_phys.sr_to_copy -=
|
||||
range_tree_space(ms->ms_freeing);
|
||||
zfs_range_tree_space(ms->ms_freeing);
|
||||
|
||||
ASSERT0(range_tree_space(ms->ms_freed));
|
||||
ASSERT0(zfs_range_tree_space(ms->ms_freed));
|
||||
for (int t = 0; t < TXG_SIZE; t++)
|
||||
ASSERT0(range_tree_space(ms->ms_allocating[t]));
|
||||
ASSERT0(zfs_range_tree_space(ms->ms_allocating[t]));
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -770,7 +771,7 @@ free_from_removing_vdev(vdev_t *vd, uint64_t offset, uint64_t size)
|
||||
* completed the copy and synced the mapping (see
|
||||
* vdev_mapping_sync).
|
||||
*/
|
||||
range_tree_add(svr->svr_frees[txgoff],
|
||||
zfs_range_tree_add(svr->svr_frees[txgoff],
|
||||
offset, inflight_size);
|
||||
size -= inflight_size;
|
||||
offset += inflight_size;
|
||||
@@ -806,7 +807,8 @@ free_from_removing_vdev(vdev_t *vd, uint64_t offset, uint64_t size)
|
||||
uint64_t, size);
|
||||
|
||||
if (svr->svr_allocd_segs != NULL)
|
||||
range_tree_clear(svr->svr_allocd_segs, offset, size);
|
||||
zfs_range_tree_clear(svr->svr_allocd_segs, offset,
|
||||
size);
|
||||
|
||||
/*
|
||||
* Since we now do not need to copy this data, for
|
||||
@@ -915,7 +917,7 @@ vdev_mapping_sync(void *arg, dmu_tx_t *tx)
|
||||
* mapping entries were in flight.
|
||||
*/
|
||||
mutex_enter(&svr->svr_lock);
|
||||
range_tree_vacate(svr->svr_frees[txg & TXG_MASK],
|
||||
zfs_range_tree_vacate(svr->svr_frees[txg & TXG_MASK],
|
||||
free_mapped_segment_cb, vd);
|
||||
ASSERT3U(svr->svr_max_offset_to_sync[txg & TXG_MASK], >=,
|
||||
vdev_indirect_mapping_max_offset(vim));
|
||||
@@ -929,7 +931,7 @@ typedef struct vdev_copy_segment_arg {
|
||||
spa_t *vcsa_spa;
|
||||
dva_t *vcsa_dest_dva;
|
||||
uint64_t vcsa_txg;
|
||||
range_tree_t *vcsa_obsolete_segs;
|
||||
zfs_range_tree_t *vcsa_obsolete_segs;
|
||||
} vdev_copy_segment_arg_t;
|
||||
|
||||
static void
|
||||
@@ -966,9 +968,9 @@ spa_vdev_copy_segment_done(zio_t *zio)
|
||||
{
|
||||
vdev_copy_segment_arg_t *vcsa = zio->io_private;
|
||||
|
||||
range_tree_vacate(vcsa->vcsa_obsolete_segs,
|
||||
zfs_range_tree_vacate(vcsa->vcsa_obsolete_segs,
|
||||
unalloc_seg, vcsa);
|
||||
range_tree_destroy(vcsa->vcsa_obsolete_segs);
|
||||
zfs_range_tree_destroy(vcsa->vcsa_obsolete_segs);
|
||||
kmem_free(vcsa, sizeof (*vcsa));
|
||||
|
||||
spa_config_exit(zio->io_spa, SCL_STATE, zio->io_spa);
|
||||
@@ -1119,7 +1121,7 @@ spa_vdev_copy_one_child(vdev_copy_arg_t *vca, zio_t *nzio,
|
||||
* read from the old location and write to the new location.
|
||||
*/
|
||||
static int
|
||||
spa_vdev_copy_segment(vdev_t *vd, range_tree_t *segs,
|
||||
spa_vdev_copy_segment(vdev_t *vd, zfs_range_tree_t *segs,
|
||||
uint64_t maxalloc, uint64_t txg,
|
||||
vdev_copy_arg_t *vca, zio_alloc_list_t *zal)
|
||||
{
|
||||
@@ -1128,14 +1130,14 @@ spa_vdev_copy_segment(vdev_t *vd, range_tree_t *segs,
|
||||
spa_vdev_removal_t *svr = spa->spa_vdev_removal;
|
||||
vdev_indirect_mapping_entry_t *entry;
|
||||
dva_t dst = {{ 0 }};
|
||||
uint64_t start = range_tree_min(segs);
|
||||
uint64_t start = zfs_range_tree_min(segs);
|
||||
ASSERT0(P2PHASE(start, 1 << spa->spa_min_ashift));
|
||||
|
||||
ASSERT3U(maxalloc, <=, SPA_MAXBLOCKSIZE);
|
||||
ASSERT0(P2PHASE(maxalloc, 1 << spa->spa_min_ashift));
|
||||
|
||||
uint64_t size = range_tree_span(segs);
|
||||
if (range_tree_span(segs) > maxalloc) {
|
||||
uint64_t size = zfs_range_tree_span(segs);
|
||||
if (zfs_range_tree_span(segs) > maxalloc) {
|
||||
/*
|
||||
* We can't allocate all the segments. Prefer to end
|
||||
* the allocation at the end of a segment, thus avoiding
|
||||
@@ -1143,13 +1145,13 @@ spa_vdev_copy_segment(vdev_t *vd, range_tree_t *segs,
|
||||
*/
|
||||
range_seg_max_t search;
|
||||
zfs_btree_index_t where;
|
||||
rs_set_start(&search, segs, start + maxalloc);
|
||||
rs_set_end(&search, segs, start + maxalloc);
|
||||
zfs_rs_set_start(&search, segs, start + maxalloc);
|
||||
zfs_rs_set_end(&search, segs, start + maxalloc);
|
||||
(void) zfs_btree_find(&segs->rt_root, &search, &where);
|
||||
range_seg_t *rs = zfs_btree_prev(&segs->rt_root, &where,
|
||||
zfs_range_seg_t *rs = zfs_btree_prev(&segs->rt_root, &where,
|
||||
&where);
|
||||
if (rs != NULL) {
|
||||
size = rs_get_end(rs, segs) - start;
|
||||
size = zfs_rs_get_end(rs, segs) - start;
|
||||
} else {
|
||||
/*
|
||||
* There are no segments that end before maxalloc.
|
||||
@@ -1182,27 +1184,27 @@ spa_vdev_copy_segment(vdev_t *vd, range_tree_t *segs,
|
||||
* relative to the start of the range to be copied (i.e. relative to the
|
||||
* local variable "start").
|
||||
*/
|
||||
range_tree_t *obsolete_segs = range_tree_create(NULL, RANGE_SEG64, NULL,
|
||||
0, 0);
|
||||
zfs_range_tree_t *obsolete_segs = zfs_range_tree_create(NULL,
|
||||
ZFS_RANGE_SEG64, NULL, 0, 0);
|
||||
|
||||
zfs_btree_index_t where;
|
||||
range_seg_t *rs = zfs_btree_first(&segs->rt_root, &where);
|
||||
ASSERT3U(rs_get_start(rs, segs), ==, start);
|
||||
uint64_t prev_seg_end = rs_get_end(rs, segs);
|
||||
zfs_range_seg_t *rs = zfs_btree_first(&segs->rt_root, &where);
|
||||
ASSERT3U(zfs_rs_get_start(rs, segs), ==, start);
|
||||
uint64_t prev_seg_end = zfs_rs_get_end(rs, segs);
|
||||
while ((rs = zfs_btree_next(&segs->rt_root, &where, &where)) != NULL) {
|
||||
if (rs_get_start(rs, segs) >= start + size) {
|
||||
if (zfs_rs_get_start(rs, segs) >= start + size) {
|
||||
break;
|
||||
} else {
|
||||
range_tree_add(obsolete_segs,
|
||||
zfs_range_tree_add(obsolete_segs,
|
||||
prev_seg_end - start,
|
||||
rs_get_start(rs, segs) - prev_seg_end);
|
||||
zfs_rs_get_start(rs, segs) - prev_seg_end);
|
||||
}
|
||||
prev_seg_end = rs_get_end(rs, segs);
|
||||
prev_seg_end = zfs_rs_get_end(rs, segs);
|
||||
}
|
||||
/* We don't end in the middle of an obsolete range */
|
||||
ASSERT3U(start + size, <=, prev_seg_end);
|
||||
|
||||
range_tree_clear(segs, start, size);
|
||||
zfs_range_tree_clear(segs, start, size);
|
||||
|
||||
/*
|
||||
* We can't have any padding of the allocated size, otherwise we will
|
||||
@@ -1216,7 +1218,8 @@ spa_vdev_copy_segment(vdev_t *vd, range_tree_t *segs,
|
||||
DVA_MAPPING_SET_SRC_OFFSET(&entry->vime_mapping, start);
|
||||
entry->vime_mapping.vimep_dst = dst;
|
||||
if (spa_feature_is_enabled(spa, SPA_FEATURE_OBSOLETE_COUNTS)) {
|
||||
entry->vime_obsolete_count = range_tree_space(obsolete_segs);
|
||||
entry->vime_obsolete_count =
|
||||
zfs_range_tree_space(obsolete_segs);
|
||||
}
|
||||
|
||||
vdev_copy_segment_arg_t *vcsa = kmem_zalloc(sizeof (*vcsa), KM_SLEEP);
|
||||
@@ -1455,30 +1458,31 @@ spa_vdev_copy_impl(vdev_t *vd, spa_vdev_removal_t *svr, vdev_copy_arg_t *vca,
|
||||
* allocated segments that we are copying. We may also be copying
|
||||
* free segments (of up to vdev_removal_max_span bytes).
|
||||
*/
|
||||
range_tree_t *segs = range_tree_create(NULL, RANGE_SEG64, NULL, 0, 0);
|
||||
zfs_range_tree_t *segs = zfs_range_tree_create(NULL, ZFS_RANGE_SEG64,
|
||||
NULL, 0, 0);
|
||||
for (;;) {
|
||||
range_tree_t *rt = svr->svr_allocd_segs;
|
||||
range_seg_t *rs = range_tree_first(rt);
|
||||
zfs_range_tree_t *rt = svr->svr_allocd_segs;
|
||||
zfs_range_seg_t *rs = zfs_range_tree_first(rt);
|
||||
|
||||
if (rs == NULL)
|
||||
break;
|
||||
|
||||
uint64_t seg_length;
|
||||
|
||||
if (range_tree_is_empty(segs)) {
|
||||
if (zfs_range_tree_is_empty(segs)) {
|
||||
/* need to truncate the first seg based on max_alloc */
|
||||
seg_length = MIN(rs_get_end(rs, rt) - rs_get_start(rs,
|
||||
rt), *max_alloc);
|
||||
seg_length = MIN(zfs_rs_get_end(rs, rt) -
|
||||
zfs_rs_get_start(rs, rt), *max_alloc);
|
||||
} else {
|
||||
if (rs_get_start(rs, rt) - range_tree_max(segs) >
|
||||
vdev_removal_max_span) {
|
||||
if (zfs_rs_get_start(rs, rt) - zfs_range_tree_max(segs)
|
||||
> vdev_removal_max_span) {
|
||||
/*
|
||||
* Including this segment would cause us to
|
||||
* copy a larger unneeded chunk than is allowed.
|
||||
*/
|
||||
break;
|
||||
} else if (rs_get_end(rs, rt) - range_tree_min(segs) >
|
||||
*max_alloc) {
|
||||
} else if (zfs_rs_get_end(rs, rt) -
|
||||
zfs_range_tree_min(segs) > *max_alloc) {
|
||||
/*
|
||||
* This additional segment would extend past
|
||||
* max_alloc. Rather than splitting this
|
||||
@@ -1486,19 +1490,19 @@ spa_vdev_copy_impl(vdev_t *vd, spa_vdev_removal_t *svr, vdev_copy_arg_t *vca,
|
||||
*/
|
||||
break;
|
||||
} else {
|
||||
seg_length = rs_get_end(rs, rt) -
|
||||
rs_get_start(rs, rt);
|
||||
seg_length = zfs_rs_get_end(rs, rt) -
|
||||
zfs_rs_get_start(rs, rt);
|
||||
}
|
||||
}
|
||||
|
||||
range_tree_add(segs, rs_get_start(rs, rt), seg_length);
|
||||
range_tree_remove(svr->svr_allocd_segs,
|
||||
rs_get_start(rs, rt), seg_length);
|
||||
zfs_range_tree_add(segs, zfs_rs_get_start(rs, rt), seg_length);
|
||||
zfs_range_tree_remove(svr->svr_allocd_segs,
|
||||
zfs_rs_get_start(rs, rt), seg_length);
|
||||
}
|
||||
|
||||
if (range_tree_is_empty(segs)) {
|
||||
if (zfs_range_tree_is_empty(segs)) {
|
||||
mutex_exit(&svr->svr_lock);
|
||||
range_tree_destroy(segs);
|
||||
zfs_range_tree_destroy(segs);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1507,20 +1511,20 @@ spa_vdev_copy_impl(vdev_t *vd, spa_vdev_removal_t *svr, vdev_copy_arg_t *vca,
|
||||
svr, tx);
|
||||
}
|
||||
|
||||
svr->svr_max_offset_to_sync[txg & TXG_MASK] = range_tree_max(segs);
|
||||
svr->svr_max_offset_to_sync[txg & TXG_MASK] = zfs_range_tree_max(segs);
|
||||
|
||||
/*
|
||||
* Note: this is the amount of *allocated* space
|
||||
* that we are taking care of each txg.
|
||||
*/
|
||||
svr->svr_bytes_done[txg & TXG_MASK] += range_tree_space(segs);
|
||||
svr->svr_bytes_done[txg & TXG_MASK] += zfs_range_tree_space(segs);
|
||||
|
||||
mutex_exit(&svr->svr_lock);
|
||||
|
||||
zio_alloc_list_t zal;
|
||||
metaslab_trace_init(&zal);
|
||||
uint64_t thismax = SPA_MAXBLOCKSIZE;
|
||||
while (!range_tree_is_empty(segs)) {
|
||||
while (!zfs_range_tree_is_empty(segs)) {
|
||||
int error = spa_vdev_copy_segment(vd,
|
||||
segs, thismax, txg, vca, &zal);
|
||||
|
||||
@@ -1537,7 +1541,7 @@ spa_vdev_copy_impl(vdev_t *vd, spa_vdev_removal_t *svr, vdev_copy_arg_t *vca,
|
||||
ASSERT3U(spa->spa_max_ashift, >=, SPA_MINBLOCKSHIFT);
|
||||
ASSERT3U(spa->spa_max_ashift, ==, spa->spa_min_ashift);
|
||||
uint64_t attempted =
|
||||
MIN(range_tree_span(segs), thismax);
|
||||
MIN(zfs_range_tree_span(segs), thismax);
|
||||
thismax = P2ROUNDUP(attempted / 2,
|
||||
1 << spa->spa_max_ashift);
|
||||
/*
|
||||
@@ -1557,7 +1561,7 @@ spa_vdev_copy_impl(vdev_t *vd, spa_vdev_removal_t *svr, vdev_copy_arg_t *vca,
|
||||
}
|
||||
}
|
||||
metaslab_trace_fini(&zal);
|
||||
range_tree_destroy(segs);
|
||||
zfs_range_tree_destroy(segs);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1628,7 +1632,7 @@ spa_vdev_remove_thread(void *arg)
|
||||
metaslab_t *msp = vd->vdev_ms[msi];
|
||||
ASSERT3U(msi, <=, vd->vdev_ms_count);
|
||||
|
||||
ASSERT0(range_tree_space(svr->svr_allocd_segs));
|
||||
ASSERT0(zfs_range_tree_space(svr->svr_allocd_segs));
|
||||
|
||||
mutex_enter(&msp->ms_sync_lock);
|
||||
mutex_enter(&msp->ms_lock);
|
||||
@@ -1637,7 +1641,7 @@ spa_vdev_remove_thread(void *arg)
|
||||
* Assert nothing in flight -- ms_*tree is empty.
|
||||
*/
|
||||
for (int i = 0; i < TXG_SIZE; i++) {
|
||||
ASSERT0(range_tree_space(msp->ms_allocating[i]));
|
||||
ASSERT0(zfs_range_tree_space(msp->ms_allocating[i]));
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1653,19 +1657,20 @@ spa_vdev_remove_thread(void *arg)
|
||||
VERIFY0(space_map_load(msp->ms_sm,
|
||||
svr->svr_allocd_segs, SM_ALLOC));
|
||||
|
||||
range_tree_walk(msp->ms_unflushed_allocs,
|
||||
range_tree_add, svr->svr_allocd_segs);
|
||||
range_tree_walk(msp->ms_unflushed_frees,
|
||||
range_tree_remove, svr->svr_allocd_segs);
|
||||
range_tree_walk(msp->ms_freeing,
|
||||
range_tree_remove, svr->svr_allocd_segs);
|
||||
zfs_range_tree_walk(msp->ms_unflushed_allocs,
|
||||
zfs_range_tree_add, svr->svr_allocd_segs);
|
||||
zfs_range_tree_walk(msp->ms_unflushed_frees,
|
||||
zfs_range_tree_remove, svr->svr_allocd_segs);
|
||||
zfs_range_tree_walk(msp->ms_freeing,
|
||||
zfs_range_tree_remove, svr->svr_allocd_segs);
|
||||
|
||||
/*
|
||||
* When we are resuming from a paused removal (i.e.
|
||||
* when importing a pool with a removal in progress),
|
||||
* discard any state that we have already processed.
|
||||
*/
|
||||
range_tree_clear(svr->svr_allocd_segs, 0, start_offset);
|
||||
zfs_range_tree_clear(svr->svr_allocd_segs, 0,
|
||||
start_offset);
|
||||
}
|
||||
mutex_exit(&msp->ms_lock);
|
||||
mutex_exit(&msp->ms_sync_lock);
|
||||
@@ -1677,7 +1682,7 @@ spa_vdev_remove_thread(void *arg)
|
||||
(u_longlong_t)msp->ms_id);
|
||||
|
||||
while (!svr->svr_thread_exit &&
|
||||
!range_tree_is_empty(svr->svr_allocd_segs)) {
|
||||
!zfs_range_tree_is_empty(svr->svr_allocd_segs)) {
|
||||
|
||||
mutex_exit(&svr->svr_lock);
|
||||
|
||||
@@ -1756,7 +1761,7 @@ spa_vdev_remove_thread(void *arg)
|
||||
|
||||
if (svr->svr_thread_exit) {
|
||||
mutex_enter(&svr->svr_lock);
|
||||
range_tree_vacate(svr->svr_allocd_segs, NULL, NULL);
|
||||
zfs_range_tree_vacate(svr->svr_allocd_segs, NULL, NULL);
|
||||
svr->svr_thread = NULL;
|
||||
cv_broadcast(&svr->svr_cv);
|
||||
mutex_exit(&svr->svr_lock);
|
||||
@@ -1776,7 +1781,7 @@ spa_vdev_remove_thread(void *arg)
|
||||
spa_vdev_remove_cancel_impl(spa);
|
||||
}
|
||||
} else {
|
||||
ASSERT0(range_tree_space(svr->svr_allocd_segs));
|
||||
ASSERT0(zfs_range_tree_space(svr->svr_allocd_segs));
|
||||
vdev_remove_complete(spa);
|
||||
}
|
||||
|
||||
@@ -1885,7 +1890,7 @@ spa_vdev_remove_cancel_sync(void *arg, dmu_tx_t *tx)
|
||||
if (msp->ms_start >= vdev_indirect_mapping_max_offset(vim))
|
||||
break;
|
||||
|
||||
ASSERT0(range_tree_space(svr->svr_allocd_segs));
|
||||
ASSERT0(zfs_range_tree_space(svr->svr_allocd_segs));
|
||||
|
||||
mutex_enter(&msp->ms_lock);
|
||||
|
||||
@@ -1893,22 +1898,22 @@ spa_vdev_remove_cancel_sync(void *arg, dmu_tx_t *tx)
|
||||
* Assert nothing in flight -- ms_*tree is empty.
|
||||
*/
|
||||
for (int i = 0; i < TXG_SIZE; i++)
|
||||
ASSERT0(range_tree_space(msp->ms_allocating[i]));
|
||||
ASSERT0(zfs_range_tree_space(msp->ms_allocating[i]));
|
||||
for (int i = 0; i < TXG_DEFER_SIZE; i++)
|
||||
ASSERT0(range_tree_space(msp->ms_defer[i]));
|
||||
ASSERT0(range_tree_space(msp->ms_freed));
|
||||
ASSERT0(zfs_range_tree_space(msp->ms_defer[i]));
|
||||
ASSERT0(zfs_range_tree_space(msp->ms_freed));
|
||||
|
||||
if (msp->ms_sm != NULL) {
|
||||
mutex_enter(&svr->svr_lock);
|
||||
VERIFY0(space_map_load(msp->ms_sm,
|
||||
svr->svr_allocd_segs, SM_ALLOC));
|
||||
|
||||
range_tree_walk(msp->ms_unflushed_allocs,
|
||||
range_tree_add, svr->svr_allocd_segs);
|
||||
range_tree_walk(msp->ms_unflushed_frees,
|
||||
range_tree_remove, svr->svr_allocd_segs);
|
||||
range_tree_walk(msp->ms_freeing,
|
||||
range_tree_remove, svr->svr_allocd_segs);
|
||||
zfs_range_tree_walk(msp->ms_unflushed_allocs,
|
||||
zfs_range_tree_add, svr->svr_allocd_segs);
|
||||
zfs_range_tree_walk(msp->ms_unflushed_frees,
|
||||
zfs_range_tree_remove, svr->svr_allocd_segs);
|
||||
zfs_range_tree_walk(msp->ms_freeing,
|
||||
zfs_range_tree_remove, svr->svr_allocd_segs);
|
||||
|
||||
/*
|
||||
* Clear everything past what has been synced,
|
||||
@@ -1918,7 +1923,7 @@ spa_vdev_remove_cancel_sync(void *arg, dmu_tx_t *tx)
|
||||
uint64_t sm_end = msp->ms_sm->sm_start +
|
||||
msp->ms_sm->sm_size;
|
||||
if (sm_end > syncd)
|
||||
range_tree_clear(svr->svr_allocd_segs,
|
||||
zfs_range_tree_clear(svr->svr_allocd_segs,
|
||||
syncd, sm_end - syncd);
|
||||
|
||||
mutex_exit(&svr->svr_lock);
|
||||
@@ -1926,7 +1931,7 @@ spa_vdev_remove_cancel_sync(void *arg, dmu_tx_t *tx)
|
||||
mutex_exit(&msp->ms_lock);
|
||||
|
||||
mutex_enter(&svr->svr_lock);
|
||||
range_tree_vacate(svr->svr_allocd_segs,
|
||||
zfs_range_tree_vacate(svr->svr_allocd_segs,
|
||||
free_mapped_segment_cb, vd);
|
||||
mutex_exit(&svr->svr_lock);
|
||||
}
|
||||
@@ -1935,7 +1940,7 @@ spa_vdev_remove_cancel_sync(void *arg, dmu_tx_t *tx)
|
||||
* Note: this must happen after we invoke free_mapped_segment_cb,
|
||||
* because it adds to the obsolete_segments.
|
||||
*/
|
||||
range_tree_vacate(vd->vdev_obsolete_segments, NULL, NULL);
|
||||
zfs_range_tree_vacate(vd->vdev_obsolete_segments, NULL, NULL);
|
||||
|
||||
ASSERT3U(vic->vic_mapping_object, ==,
|
||||
vdev_indirect_mapping_object(vd->vdev_indirect_mapping));
|
||||
|
||||
Reference in New Issue
Block a user