FreeBSD rS271776 - Persist vdev_resilver_txg changes
Persist vdev_resilver_txg changes to avoid panic caused by validation vs a vdev_resilver_txg value from a previous resilver. Authored-by: smh <smh@FreeBSD.org> Ported-by: Chris Dunlop <chris@onthe.net.au> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> OpenZFS-issue: https://www.illumos.org/issues/5154 FreeBSD-issue: https://reviews.freebsd.org/rS271776 FreeBSD-commit: https://github.com/freebsd/freebsd/commit/c3c60bf Closes #4790
This commit is contained in:
parent
784d15c14c
commit
d14fa5dba1
|
@ -1909,12 +1909,15 @@ vdev_dtl_reassess(vdev_t *vd, uint64_t txg, uint64_t scrub_txg, int scrub_done)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If the vdev was resilvering and no longer has any
|
* If the vdev was resilvering and no longer has any
|
||||||
* DTLs then reset its resilvering flag.
|
* DTLs then reset its resilvering flag and dirty
|
||||||
|
* the top level so that we persist the change.
|
||||||
*/
|
*/
|
||||||
if (vd->vdev_resilver_txg != 0 &&
|
if (vd->vdev_resilver_txg != 0 &&
|
||||||
range_tree_space(vd->vdev_dtl[DTL_MISSING]) == 0 &&
|
range_tree_space(vd->vdev_dtl[DTL_MISSING]) == 0 &&
|
||||||
range_tree_space(vd->vdev_dtl[DTL_OUTAGE]) == 0)
|
range_tree_space(vd->vdev_dtl[DTL_OUTAGE]) == 0) {
|
||||||
vd->vdev_resilver_txg = 0;
|
vd->vdev_resilver_txg = 0;
|
||||||
|
vdev_config_dirty(vd->vdev_top);
|
||||||
|
}
|
||||||
|
|
||||||
mutex_exit(&vd->vdev_dtl_lock);
|
mutex_exit(&vd->vdev_dtl_lock);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue