From: Tom Caputi Date: Wed, 7 Nov 2018 23:44:14 +0000 (-0500) Subject: Fix dirtying vdev config on with RO spa X-Git-Tag: zfs-0.8.0-rc2~14 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fde25c0a87ea7e2d4438485cd55646a91b99c4b4;p=zfs 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 Reviewed-by: Brian Behlendorf Signed-off-by: Tom Caputi Closes #8085 --- diff --git a/module/zfs/vdev.c b/module/zfs/vdev.c index 2f28a01c6..78e701c80 100644 --- a/module/zfs/vdev.c +++ b/module/zfs/vdev.c @@ -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 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 * 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_OUTAGE])) { vd->vdev_resilver_txg = 0;