Skip to content

Commit

Permalink
Cancel initialize and TRIM before vdev_metaslab_fini()
Browse files Browse the repository at this point in the history
Any running 'zpool initialize' or TRIM must be cancelled prior
to the vdev_metaslab_fini() call in spa_vdev_remove_log() which
will unload the metaslabs and set ms->ms_group == NULL.

TEST_ZTEST_TIMEOUT=7200
Signed-off-by: Brian Behlendorf <[email protected]>
Issue openzfs#8602
  • Loading branch information
behlendorf committed Dec 19, 2019
1 parent a364048 commit e1fd8cd
Showing 1 changed file with 7 additions and 7 deletions.
14 changes: 7 additions & 7 deletions module/zfs/vdev_removal.c
Original file line number Diff line number Diff line change
Expand Up @@ -1889,11 +1889,16 @@ spa_vdev_remove_log(vdev_t *vd, uint64_t *txg)
ASSERT0(vd->vdev_stat.vs_alloc);

/*
* The evacuation succeeded. Remove any remaining MOS metadata
* associated with this vdev, and wait for these changes to sync.
* The evacuation succeeded. Cancel any initialize or TRIM which
* was in progress, remove any remaining MOS metadata associated
* with this vdev, and wait for these changes to sync.
*/
vd->vdev_removing = B_TRUE;

vdev_initialize_stop_all(vd, VDEV_INITIALIZE_CANCELED);
vdev_trim_stop_all(vd, VDEV_TRIM_CANCELED);
vdev_autotrim_stop_wait(vd);

vdev_dirty_leaves(vd, VDD_DTL, *txg);
vdev_config_dirty(vd);

Expand Down Expand Up @@ -1922,11 +1927,6 @@ spa_vdev_remove_log(vdev_t *vd, uint64_t *txg)

spa_vdev_config_exit(spa, NULL, *txg, 0, FTAG);

/* Stop initializing and TRIM */
vdev_initialize_stop_all(vd, VDEV_INITIALIZE_CANCELED);
vdev_trim_stop_all(vd, VDEV_TRIM_CANCELED);
vdev_autotrim_stop_wait(vd);

*txg = spa_vdev_config_enter(spa);

sysevent_t *ev = spa_event_create(spa, vd, NULL,
Expand Down

0 comments on commit e1fd8cd

Please sign in to comment.