/* * Free a vdev_t that has been removed from service. */ static void vdev_free_common(vdev_t *vd) { spa_t *spa = vd->vdev_spa; if (vd->vdev_path) spa_strfree(vd->vdev_path); if (vd->vdev_devid) spa_strfree(vd->vdev_devid); if (vd->vdev_isspare) spa_spare_remove(vd); txg_list_destroy(&vd->vdev_ms_list); txg_list_destroy(&vd->vdev_dtl_list); mutex_enter(&vd->vdev_dtl_lock); space_map_unload(&vd->vdev_dtl_map); space_map_destroy(&vd->vdev_dtl_map); space_map_vacate(&vd->vdev_dtl_scrub, NULL, NULL); space_map_destroy(&vd->vdev_dtl_scrub); mutex_exit(&vd->vdev_dtl_lock); mutex_destroy(&vd->vdev_dtl_lock); mutex_destroy(&vd->vdev_stat_lock); if (vd == spa->spa_root_vdev) spa->spa_root_vdev = NULL; kmem_free(vd, sizeof (vdev_t)); }
void* thr1(void* arg){ mutex_enter(MTX); switch(__nondet_int()){ case 1: space_map_contains(); break; case 2: space_map_walk(); break; case 3: if(LOADING) space_map_load_wait(); else if(!LOADED) space_map_load(); else space_map_unload(); break; break; case 6: space_map_alloc(); break; case 7: space_map_sync(); break; case 8: space_map_ref_generate_map(); break; } ASSERT(MUTEX_HELD(MTX)); mutex_exit(MTX); assert(1); return 0; }