mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
range_tree: Provide more debug details upon unexpected add/remove
Sponsored-by: Klara, Inc. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Alexander Motin <alexander.motin@TrueNAS.com> Signed-off-by: Igor Ostapenko <igor.ostapenko@klarasystems.com> Closes #17581
This commit is contained in:
+18
-12
@@ -364,13 +364,15 @@ 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 = zfs_range_tree_create(NULL, ZFS_RANGE_SEG64,
|
||||
NULL, 0, 0);
|
||||
svr->svr_allocd_segs = zfs_range_tree_create_flags(
|
||||
NULL, ZFS_RANGE_SEG64, NULL, 0, 0,
|
||||
ZFS_RT_F_DYN_NAME, vdev_rt_name(vd, "svr_allocd_segs"));
|
||||
svr->svr_vdev_id = vd->vdev_id;
|
||||
|
||||
for (int i = 0; i < TXG_SIZE; i++) {
|
||||
svr->svr_frees[i] = zfs_range_tree_create(NULL, ZFS_RANGE_SEG64,
|
||||
NULL, 0, 0);
|
||||
svr->svr_frees[i] = zfs_range_tree_create_flags(
|
||||
NULL, ZFS_RANGE_SEG64, NULL, 0, 0,
|
||||
ZFS_RT_F_DYN_NAME, vdev_rt_name(vd, "svr_frees"));
|
||||
list_create(&svr->svr_new_segments[i],
|
||||
sizeof (vdev_indirect_mapping_entry_t),
|
||||
offsetof(vdev_indirect_mapping_entry_t, vime_node));
|
||||
@@ -1179,8 +1181,9 @@ spa_vdev_copy_segment(vdev_t *vd, zfs_range_tree_t *segs,
|
||||
* relative to the start of the range to be copied (i.e. relative to the
|
||||
* local variable "start").
|
||||
*/
|
||||
zfs_range_tree_t *obsolete_segs = zfs_range_tree_create(NULL,
|
||||
ZFS_RANGE_SEG64, NULL, 0, 0);
|
||||
zfs_range_tree_t *obsolete_segs = zfs_range_tree_create_flags(
|
||||
NULL, ZFS_RANGE_SEG64, NULL, 0, 0,
|
||||
ZFS_RT_F_DYN_NAME, vdev_rt_name(vd, "obsolete_segs"));
|
||||
|
||||
zfs_btree_index_t where;
|
||||
zfs_range_seg_t *rs = zfs_btree_first(&segs->rt_root, &where);
|
||||
@@ -1448,8 +1451,9 @@ 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).
|
||||
*/
|
||||
zfs_range_tree_t *segs = zfs_range_tree_create(NULL, ZFS_RANGE_SEG64,
|
||||
NULL, 0, 0);
|
||||
zfs_range_tree_t *segs = zfs_range_tree_create_flags(
|
||||
NULL, ZFS_RANGE_SEG64, NULL, 0, 0,
|
||||
ZFS_RT_F_DYN_NAME, vdev_rt_name(vd, "spa_vdev_copy_impl:segs"));
|
||||
for (;;) {
|
||||
zfs_range_tree_t *rt = svr->svr_allocd_segs;
|
||||
zfs_range_seg_t *rs = zfs_range_tree_first(rt);
|
||||
@@ -1610,8 +1614,9 @@ spa_vdev_remove_thread(void *arg)
|
||||
vca.vca_read_error_bytes = 0;
|
||||
vca.vca_write_error_bytes = 0;
|
||||
|
||||
zfs_range_tree_t *segs = zfs_range_tree_create(NULL, ZFS_RANGE_SEG64,
|
||||
NULL, 0, 0);
|
||||
zfs_range_tree_t *segs = zfs_range_tree_create_flags(
|
||||
NULL, ZFS_RANGE_SEG64, NULL, 0, 0,
|
||||
ZFS_RT_F_DYN_NAME, vdev_rt_name(vd, "spa_vdev_remove_thread:segs"));
|
||||
|
||||
mutex_enter(&svr->svr_lock);
|
||||
|
||||
@@ -1895,8 +1900,9 @@ spa_vdev_remove_cancel_sync(void *arg, dmu_tx_t *tx)
|
||||
vdev_indirect_mapping_max_offset(vim));
|
||||
}
|
||||
|
||||
zfs_range_tree_t *segs = zfs_range_tree_create(NULL, ZFS_RANGE_SEG64,
|
||||
NULL, 0, 0);
|
||||
zfs_range_tree_t *segs = zfs_range_tree_create_flags(
|
||||
NULL, ZFS_RANGE_SEG64, NULL, 0, 0, ZFS_RT_F_DYN_NAME,
|
||||
vdev_rt_name(vd, "spa_vdev_remove_cancel_sync:segs"));
|
||||
for (uint64_t msi = 0; msi < vd->vdev_ms_count; msi++) {
|
||||
metaslab_t *msp = vd->vdev_ms[msi];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user