]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Fix waiting in ztest_device_removal()
authorTom Caputi <tcaputi@datto.com>
Mon, 22 Oct 2018 13:54:01 +0000 (09:54 -0400)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 24 Oct 2018 21:37:35 +0000 (14:37 -0700)
spa->spa_vdev_removal is created in a sync task that is initiated
via dsl_sync_task_nowait(). Since the task may not run before
spa_vdev_remove() returns, we must wait at least 1 txg to ensure
that the removal struct has been created.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Serapheim Dimitropoulos <serapheim.dimitro@delphix.com>
Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
Signed-off-by: Tom Caputi <tcaputi@datto.com>
Closes #8010

cmd/ztest/ztest.c

index 983bc0dfe03685ee7385202e49225f69cd48dbad..14e8a5e27af3b2278b85bdde1fbdc8e3151ad00a 100644 (file)
@@ -3549,6 +3549,15 @@ ztest_device_removal(ztest_ds_t *zd, uint64_t id)
                ztest_device_removal_active = B_TRUE;
                mutex_exit(&ztest_vdev_lock);
 
+               /*
+                * spa->spa_vdev_removal is created in a sync task that
+                * is initiated via dsl_sync_task_nowait(). Since the
+                * task may not run before spa_vdev_remove() returns, we
+                * must wait at least 1 txg to ensure that the removal
+                * struct has been created.
+                */
+               txg_wait_synced(spa_get_dsl(spa), 0);
+
                while (spa->spa_vdev_removal != NULL)
                        txg_wait_synced(spa_get_dsl(spa), 0);
        } else {