Cancel in-progress rebuilds when we finish removal
This issue was discovered by zloop runs. When a mirror or other redundant top-level vdev has a disk failure, and the disk is replaced, the rebuild process occurs. A removal can happen while this is in progress. If the removal completes before the rebuild does, the removal process will try to free the vdev that is still in use. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Paul Dagnelie <pcd@delphix.com> Closes #13498
This commit is contained in:
parent
b37093a188
commit
7829b465a7
|
@ -1364,6 +1364,8 @@ vdev_remove_complete(spa_t *spa)
|
||||||
ASSERT3P(vd->vdev_initialize_thread, ==, NULL);
|
ASSERT3P(vd->vdev_initialize_thread, ==, NULL);
|
||||||
ASSERT3P(vd->vdev_trim_thread, ==, NULL);
|
ASSERT3P(vd->vdev_trim_thread, ==, NULL);
|
||||||
ASSERT3P(vd->vdev_autotrim_thread, ==, NULL);
|
ASSERT3P(vd->vdev_autotrim_thread, ==, NULL);
|
||||||
|
vdev_rebuild_stop_wait(vd);
|
||||||
|
ASSERT3P(vd->vdev_rebuild_thread, ==, NULL);
|
||||||
uint64_t vdev_space = spa_deflate(spa) ?
|
uint64_t vdev_space = spa_deflate(spa) ?
|
||||||
vd->vdev_stat.vs_dspace : vd->vdev_stat.vs_space;
|
vd->vdev_stat.vs_dspace : vd->vdev_stat.vs_space;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue