MFV r348555: 9690 metaslab of vdev with no space maps was flushed during removal
illumos/illumos-gate@4e75ba6826 Reviewed by: Matt Ahrens <matt@delphix.com> Reviewed by: Brad Lewis <brad.lewis@delphix.com> Approved by: Robert Mustacchi <rm@joyent.com> Author: Serapheim Dimitropoulos <serapheim@delphix.com>
This commit is contained in:
commit
4d6afba5e0
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=348567
@ -3031,11 +3031,11 @@ vdev_destroy_spacemaps(vdev_t *vd, dmu_tx_t *tx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
vdev_remove_empty(vdev_t *vd, uint64_t txg)
|
vdev_remove_empty_log(vdev_t *vd, uint64_t txg)
|
||||||
{
|
{
|
||||||
spa_t *spa = vd->vdev_spa;
|
spa_t *spa = vd->vdev_spa;
|
||||||
dmu_tx_t *tx;
|
|
||||||
|
|
||||||
|
ASSERT(vd->vdev_islog);
|
||||||
ASSERT(vd == vd->vdev_top);
|
ASSERT(vd == vd->vdev_top);
|
||||||
ASSERT3U(txg, ==, spa_syncing_txg(spa));
|
ASSERT3U(txg, ==, spa_syncing_txg(spa));
|
||||||
|
|
||||||
@ -3079,13 +3079,14 @@ vdev_remove_empty(vdev_t *vd, uint64_t txg)
|
|||||||
ASSERT0(mg->mg_histogram[i]);
|
ASSERT0(mg->mg_histogram[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
tx = dmu_tx_create_assigned(spa_get_dsl(spa), txg);
|
dmu_tx_t *tx = dmu_tx_create_assigned(spa_get_dsl(spa), txg);
|
||||||
vdev_destroy_spacemaps(vd, tx);
|
|
||||||
|
|
||||||
if (vd->vdev_islog && vd->vdev_top_zap != 0) {
|
vdev_destroy_spacemaps(vd, tx);
|
||||||
|
if (vd->vdev_top_zap != 0) {
|
||||||
vdev_destroy_unlink_zap(vd, vd->vdev_top_zap, tx);
|
vdev_destroy_unlink_zap(vd, vd->vdev_top_zap, tx);
|
||||||
vd->vdev_top_zap = 0;
|
vd->vdev_top_zap = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
dmu_tx_commit(tx);
|
dmu_tx_commit(tx);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3157,14 +3158,11 @@ vdev_sync(vdev_t *vd, uint64_t txg)
|
|||||||
vdev_dtl_sync(lvd, txg);
|
vdev_dtl_sync(lvd, txg);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Remove the metadata associated with this vdev once it's empty.
|
* If this is an empty log device being removed, destroy the
|
||||||
* Note that this is typically used for log/cache device removal;
|
* metadata associated with it.
|
||||||
* we don't empty toplevel vdevs when removing them. But if
|
|
||||||
* a toplevel happens to be emptied, this is not harmful.
|
|
||||||
*/
|
*/
|
||||||
if (vd->vdev_stat.vs_alloc == 0 && vd->vdev_removing) {
|
if (vd->vdev_islog && vd->vdev_stat.vs_alloc == 0 && vd->vdev_removing)
|
||||||
vdev_remove_empty(vd, txg);
|
vdev_remove_empty_log(vd, txg);
|
||||||
}
|
|
||||||
|
|
||||||
(void) txg_list_add(&spa->spa_vdev_txg_list, vd, TXG_CLEAN(txg));
|
(void) txg_list_add(&spa->spa_vdev_txg_list, vd, TXG_CLEAN(txg));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user