| 82 | } |
| 83 | |
| 84 | static void |
| 85 | ddt_object_destroy(ddt_t *ddt, enum ddt_type type, enum ddt_class class, |
| 86 | dmu_tx_t *tx) |
| 87 | { |
| 88 | spa_t *spa = ddt->ddt_spa; |
| 89 | objset_t *os = ddt->ddt_os; |
| 90 | uint64_t *objectp = &ddt->ddt_object[type][class]; |
| 91 | uint64_t count; |
| 92 | char name[DDT_NAMELEN]; |
| 93 | |
| 94 | ddt_object_name(ddt, type, class, name); |
| 95 | |
| 96 | ASSERT(*objectp != 0); |
| 97 | ASSERT(ddt_histogram_empty(&ddt->ddt_histogram[type][class])); |
| 98 | VERIFY(ddt_object_count(ddt, type, class, &count) == 0 && count == 0); |
| 99 | VERIFY(zap_remove(os, DMU_POOL_DIRECTORY_OBJECT, name, tx) == 0); |
| 100 | VERIFY(zap_remove(os, spa->spa_ddt_stat_object, name, tx) == 0); |
| 101 | VERIFY(ddt_ops[type]->ddt_op_destroy(os, *objectp, tx) == 0); |
| 102 | bzero(&ddt->ddt_object_stats[type][class], sizeof (ddt_object_t)); |
| 103 | |
| 104 | *objectp = 0; |
| 105 | } |
| 106 | |
| 107 | static int |
| 108 | ddt_object_load(ddt_t *ddt, enum ddt_type type, enum ddt_class class) |
no test coverage detected