Fix dirtying vdev config on with RO spa

This patch simply corrects an issue where vdev_dtl_reassess()
could attempt to dirty the vdev config even when the spa was
not elligable for writing.

Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tom Caputi <tcaputi@datto.com>
Closes #8085
This commit is contained in:
Tom Caputi 2018-11-07 18:44:14 -05:00 committed by Brian Behlendorf
parent f44ad9297d
commit fde25c0a87

View File

@ -2520,7 +2520,8 @@ vdev_dtl_should_excise(vdev_t *vd)
} }
/* /*
* Reassess DTLs after a config change or scrub completion. * Reassess DTLs after a config change or scrub completion. If txg == 0 no
* write operations will be issued to the pool.
*/ */
void void
vdev_dtl_reassess(vdev_t *vd, uint64_t txg, uint64_t scrub_txg, int scrub_done) vdev_dtl_reassess(vdev_t *vd, uint64_t txg, uint64_t scrub_txg, int scrub_done)
@ -2603,7 +2604,7 @@ vdev_dtl_reassess(vdev_t *vd, uint64_t txg, uint64_t scrub_txg, int scrub_done)
* DTLs then reset its resilvering flag and dirty * DTLs then reset its resilvering flag and dirty
* the top level so that we persist the change. * the top level so that we persist the change.
*/ */
if (vd->vdev_resilver_txg != 0 && if (txg != 0 && vd->vdev_resilver_txg != 0 &&
range_tree_is_empty(vd->vdev_dtl[DTL_MISSING]) && range_tree_is_empty(vd->vdev_dtl[DTL_MISSING]) &&
range_tree_is_empty(vd->vdev_dtl[DTL_OUTAGE])) { range_tree_is_empty(vd->vdev_dtl[DTL_OUTAGE])) {
vd->vdev_resilver_txg = 0; vd->vdev_resilver_txg = 0;