]> granicus.if.org Git - zfs/commitdiff
Fix dirtying vdev config on with RO spa
authorTom Caputi <tcaputi@datto.com>
Wed, 7 Nov 2018 23:44:14 +0000 (18:44 -0500)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 7 Nov 2018 23:44:14 +0000 (15:44 -0800)
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

module/zfs/vdev.c

index 2f28a01c6cfd692a5e8d929f97c2a6cc73f80bfc..78e701c805184699a841a80d79734061c5af76ca 100644 (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
 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;