Permalink
Browse files

Fix waiting in ztest_device_removal()

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
  • Loading branch information...
tcaputi authored and BrainSlayer committed Oct 22, 2018
1 parent be57694 commit 178be614d4887b136e89257176e77fcdeac85299
Showing with 9 additions and 0 deletions.
  1. +9 −0 cmd/ztest/ztest.c
@@ -3550,6 +3550,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 {

0 comments on commit 178be61

Please sign in to comment.