mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
3949 ztest fault injection should avoid resilvering devices 3950 ztest: deadman fires when we're doing a scan 3951 ztest hang when running dedup test 3952 ztest: ztest_reguid test and ztest_fault_inject don't place nice together Reviewed by: Matthew Ahrens <mahrens@delphix.com> Reviewed by: Adam Leventhal <ahl@delphix.com> Approved by: Richard Lowe <richlowe@richlowe.net> References: https://www.illumos.org/issues/3949 https://www.illumos.org/issues/3950 https://www.illumos.org/issues/3951 https://www.illumos.org/issues/3952 illumos/illumos-gate@2c1e2b4414 Ported-by: Richard Yao <ryao@gentoo.org> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Issue #1775 Porting notes: 1. The deadman thread was removed from ztest during the original port because it depended on Solaris thr_create() interface. This functionality should be reintroduced using the more portable pthreads.
This commit is contained in:
committed by
Brian Behlendorf
parent
383fc4a997
commit
621dd7bb2c
+9
-1
@@ -752,6 +752,7 @@ spa_change_guid(spa_t *spa)
|
||||
int error;
|
||||
uint64_t guid;
|
||||
|
||||
mutex_enter(&spa->spa_vdev_top_lock);
|
||||
mutex_enter(&spa_namespace_lock);
|
||||
guid = spa_generate_guid(NULL);
|
||||
|
||||
@@ -764,6 +765,7 @@ spa_change_guid(spa_t *spa)
|
||||
}
|
||||
|
||||
mutex_exit(&spa_namespace_lock);
|
||||
mutex_exit(&spa->spa_vdev_top_lock);
|
||||
|
||||
return (error);
|
||||
}
|
||||
@@ -4737,7 +4739,6 @@ spa_vdev_detach(spa_t *spa, uint64_t guid, uint64_t pguid, int replace_done)
|
||||
if (pvd->vdev_ops == &vdev_spare_ops)
|
||||
cvd->vdev_unspare = B_FALSE;
|
||||
vdev_remove_parent(cvd);
|
||||
cvd->vdev_resilvering = B_FALSE;
|
||||
}
|
||||
|
||||
|
||||
@@ -5369,6 +5370,13 @@ spa_vdev_resilver_done_hunt(vdev_t *vd)
|
||||
return (oldvd);
|
||||
}
|
||||
|
||||
if (vd->vdev_resilvering && vdev_dtl_empty(vd, DTL_MISSING) &&
|
||||
vdev_dtl_empty(vd, DTL_OUTAGE)) {
|
||||
ASSERT(vd->vdev_ops->vdev_op_leaf);
|
||||
vd->vdev_resilvering = B_FALSE;
|
||||
vdev_config_dirty(vd->vdev_top);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check for a completed replacement. We always consider the first
|
||||
* vdev in the list to be the oldest vdev, and the last one to be
|
||||
|
||||
@@ -162,7 +162,6 @@ vdev_file_io_strategy(void *arg)
|
||||
static int
|
||||
vdev_file_io_start(zio_t *zio)
|
||||
{
|
||||
spa_t *spa = zio->io_spa;
|
||||
vdev_t *vd = zio->io_vd;
|
||||
vdev_file_t *vf = vd->vdev_tsd;
|
||||
|
||||
@@ -185,8 +184,8 @@ vdev_file_io_start(zio_t *zio)
|
||||
return (ZIO_PIPELINE_CONTINUE);
|
||||
}
|
||||
|
||||
spa_taskq_dispatch_ent(spa, ZIO_TYPE_FREE, ZIO_TASKQ_ISSUE,
|
||||
vdev_file_io_strategy, zio, 0, &zio->io_tqent);
|
||||
VERIFY3U(taskq_dispatch(system_taskq, vdev_file_io_strategy, zio,
|
||||
TQ_SLEEP), !=, 0);
|
||||
|
||||
return (ZIO_PIPELINE_STOP);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user