]> git.proxmox.com Git - mirror_zfs.git/blobdiff - module/zfs/vdev_removal.c
Set aside a metaslab for ZIL blocks
[mirror_zfs.git] / module / zfs / vdev_removal.c
index 6eaaddd3979f166da2efc0e8a960111aaf083657..a758fe4fb3431e085da424d9d1c6155a4bda09cf 100644 (file)
@@ -1207,6 +1207,11 @@ vdev_remove_complete(spa_t *spa)
                vd->vdev_mg = NULL;
                spa_log_sm_set_blocklimit(spa);
        }
+       if (vd->vdev_log_mg != NULL) {
+               ASSERT0(vd->vdev_ms_count);
+               metaslab_group_destroy(vd->vdev_log_mg);
+               vd->vdev_log_mg = NULL;
+       }
        ASSERT0(vd->vdev_stat.vs_space);
        ASSERT0(vd->vdev_stat.vs_dspace);
 
@@ -1780,6 +1785,8 @@ spa_vdev_remove_cancel_impl(spa_t *spa)
                spa_config_enter(spa, SCL_ALLOC | SCL_VDEV, FTAG, RW_WRITER);
                vdev_t *vd = vdev_lookup_top(spa, vdid);
                metaslab_group_activate(vd->vdev_mg);
+               ASSERT(!vd->vdev_islog);
+               metaslab_group_activate(vd->vdev_log_mg);
                spa_config_exit(spa, SCL_ALLOC | SCL_VDEV, FTAG);
        }
 
@@ -1858,6 +1865,7 @@ spa_vdev_remove_log(vdev_t *vd, uint64_t *txg)
 
        ASSERT(vd->vdev_islog);
        ASSERT(vd == vd->vdev_top);
+       ASSERT3P(vd->vdev_log_mg, ==, NULL);
        ASSERT(MUTEX_HELD(&spa_namespace_lock));
 
        /*
@@ -1893,6 +1901,7 @@ spa_vdev_remove_log(vdev_t *vd, uint64_t *txg)
 
        if (error != 0) {
                metaslab_group_activate(mg);
+               ASSERT3P(vd->vdev_log_mg, ==, NULL);
                return (error);
        }
        ASSERT0(vd->vdev_stat.vs_alloc);
@@ -2121,6 +2130,8 @@ spa_vdev_remove_top(vdev_t *vd, uint64_t *txg)
         */
        metaslab_group_t *mg = vd->vdev_mg;
        metaslab_group_passivate(mg);
+       ASSERT(!vd->vdev_islog);
+       metaslab_group_passivate(vd->vdev_log_mg);
 
        /*
         * Wait for the youngest allocations and frees to sync,
@@ -2157,6 +2168,8 @@ spa_vdev_remove_top(vdev_t *vd, uint64_t *txg)
 
        if (error != 0) {
                metaslab_group_activate(mg);
+               ASSERT(!vd->vdev_islog);
+               metaslab_group_activate(vd->vdev_log_mg);
                spa_async_request(spa, SPA_ASYNC_INITIALIZE_RESTART);
                spa_async_request(spa, SPA_ASYNC_TRIM_RESTART);
                spa_async_request(spa, SPA_ASYNC_AUTOTRIM_RESTART);