Lines Matching defs:dde
502 ddt_entry_t *dde)
508 ddt->ddt_object[type][class], &dde->dde_key,
509 dde->dde_phys, DDT_PHYS_SIZE(ddt)));
832 ddt_phys_select(const ddt_t *ddt, const ddt_entry_t *dde, const blkptr_t *bp)
834 if (dde == NULL)
837 const ddt_univ_phys_t *ddp = dde->dde_phys;
927 ddt_entry_t *dde;
930 dde = kmem_cache_alloc(ddt_entry_flat_cache, KM_SLEEP);
931 memset(dde, 0, DDT_ENTRY_FLAT_SIZE);
933 dde = kmem_cache_alloc(ddt_entry_trad_cache, KM_SLEEP);
934 memset(dde, 0, DDT_ENTRY_TRAD_SIZE);
937 cv_init(&dde->dde_cv, NULL, CV_DEFAULT, NULL);
939 dde->dde_key = *ddk;
941 return (dde);
945 ddt_alloc_entry_io(ddt_entry_t *dde)
947 if (dde->dde_io != NULL)
950 dde->dde_io = kmem_zalloc(sizeof (ddt_entry_io_t), KM_SLEEP);
954 ddt_free(const ddt_t *ddt, ddt_entry_t *dde)
956 if (dde->dde_io != NULL) {
958 ASSERT3P(dde->dde_io->dde_lead_zio[p], ==, NULL);
960 if (dde->dde_io->dde_repair_abd != NULL)
961 abd_free(dde->dde_io->dde_repair_abd);
963 kmem_free(dde->dde_io, sizeof (ddt_entry_io_t));
966 cv_destroy(&dde->dde_cv);
968 ddt_entry_flat_cache : ddt_entry_trad_cache, dde);
972 ddt_remove(ddt_t *ddt, ddt_entry_t *dde)
977 if (dde->dde_flags & DDE_FLAG_LOGGED) {
979 DDT_ENTRY_TO_LIGHTWEIGHT(ddt, dde, &ddlwe);
983 avl_remove(&ddt->ddt_tree, dde);
984 ddt_free(ddt, dde);
1079 ddt_entry_lookup_is_valid(ddt_t *ddt, const blkptr_t *bp, ddt_entry_t *dde)
1091 dde->dde_phys->ddp_flat.ddp_dva :
1092 dde->dde_phys->ddp_trad[ndvas].ddp_dva;
1113 ddt_entry_t *dde;
1135 dde = avl_find(&ddt->ddt_tree, &search, &where);
1136 if (dde != NULL) {
1138 if (dde->dde_flags & DDE_FLAG_OVERQUOTA)
1143 if (dde->dde_flags & DDE_FLAG_LOADED) {
1144 if (ddt_entry_lookup_is_valid(ddt, bp, dde))
1145 return (dde);
1150 dde->dde_waiters++;
1152 while (!(dde->dde_flags & DDE_FLAG_LOADED))
1153 cv_wait(&dde->dde_cv, &ddt->ddt_lock);
1154 dde->dde_waiters--;
1157 if (dde->dde_flags & DDE_FLAG_OVERQUOTA) {
1158 if (dde->dde_waiters == 0) {
1159 avl_remove(&ddt->ddt_tree, dde);
1160 ddt_free(ddt, dde);
1168 if (ddt_entry_lookup_is_valid(ddt, bp, dde))
1169 return (dde);
1175 dde = ddt_alloc(ddt, &search);
1179 dde->dde_phys->ddp_flat.ddp_class_start = ddt_class_start();
1181 avl_insert(&ddt->ddt_tree, dde, where);
1192 dde->dde_type = ddlwe.ddlwe_type;
1193 dde->dde_class = ddlwe.ddlwe_class;
1194 memcpy(dde->dde_phys, &ddlwe.ddlwe_phys,
1197 if (!ddt_entry_lookup_is_valid(ddt, bp, dde)) {
1198 avl_remove(&ddt->ddt_tree, dde);
1199 ddt_free(ddt, dde);
1214 dde->dde_flags = DDE_FLAG_LOADED | DDE_FLAG_LOGGED;
1219 return (dde);
1236 error = ddt_object_lookup(ddt, type, class, dde);
1248 ASSERT(!(dde->dde_flags & DDE_FLAG_LOADED));
1250 dde->dde_type = type; /* will be DDT_TYPES if no entry found */
1251 dde->dde_class = class; /* will be DDT_CLASSES if no entry found */
1255 if (dde->dde_type == DDT_TYPES &&
1256 dde->dde_class == DDT_CLASSES &&
1259 if (dde->dde_waiters == 0) {
1260 avl_remove(&ddt->ddt_tree, dde);
1261 ddt_free(ddt, dde);
1266 dde->dde_flags |= DDE_FLAG_OVERQUOTA;
1279 valid = ddt_entry_lookup_is_valid(ddt, bp, dde);
1280 if (!valid && dde->dde_waiters == 0) {
1281 avl_remove(&ddt->ddt_tree, dde);
1282 ddt_free(ddt, dde);
1300 &ddt->ddt_histogram[dde->dde_type][dde->dde_class];
1303 DDT_ENTRY_TO_LIGHTWEIGHT(ddt, dde, &ddlwe);
1311 dde->dde_flags |= DDE_FLAG_LOADED;
1312 cv_broadcast(&dde->dde_cv);
1314 if ((dde->dde_flags & DDE_FLAG_OVERQUOTA) || !valid)
1317 return (dde);
1712 ddt_entry_t *dde;
1716 dde = ddt_alloc(ddt, &ddk);
1717 ddt_alloc_entry_io(dde);
1727 ddt_object_lookup(ddt, type, class, dde) == 0)
1728 return (dde);
1732 memset(dde->dde_phys, 0, DDT_PHYS_SIZE(ddt));
1734 return (dde);
1738 ddt_repair_done(ddt_t *ddt, ddt_entry_t *dde)
1744 if (dde->dde_io->dde_repair_abd != NULL &&
1746 avl_find(&ddt->ddt_repair_tree, dde, &where) == NULL)
1747 avl_insert(&ddt->ddt_repair_tree, dde, where);
1749 ddt_free(ddt, dde);
1764 ddt_repair_entry(ddt_t *ddt, ddt_entry_t *dde, ddt_entry_t *rdde, zio_t *rio)
1766 ddt_key_t *ddk = &dde->dde_key;
1775 ddt_univ_phys_t *ddp = dde->dde_phys;
1808 ddt_entry_t *dde, *rdde_next, *rdde;
1822 dde = ddt_repair_start(ddt, &blk);
1823 ddt_repair_entry(ddt, dde, rdde, rio);
1824 ddt_repair_done(ddt, dde);
2229 ddt_entry_t *dde;
2232 while ((dde =
2234 ASSERT(dde->dde_flags & DDE_FLAG_LOADED);
2235 DDT_ENTRY_TO_LIGHTWEIGHT(ddt, dde, &ddlwe);
2238 ddt_free(ddt, dde);
2288 ddt_entry_t *dde;
2290 while ((dde = avl_destroy_nodes(
2292 ASSERT(dde->dde_flags & DDE_FLAG_LOADED);
2295 DDT_ENTRY_TO_LIGHTWEIGHT(ddt, dde, &ddlwe);
2297 dde->dde_type, dde->dde_class, tx);
2299 ddt_free(ddt, dde);
2465 ddt_entry_t *dde;
2472 dde = ddt_lookup(ddt, bp);
2475 if (dde == NULL) {
2481 if ((dde->dde_type < DDT_TYPES) || (dde->dde_flags & DDE_FLAG_LOGGED)) {
2490 ddt_phys_addref(dde->dde_phys, v);
2498 ddt_remove(ddt, dde);
2554 ddt_entry_t *dde = ddt_lookup(ddt, &blk);
2555 if (dde != NULL && !(dde->dde_flags & DDE_FLAG_LOGGED)) {
2556 ASSERT(dde->dde_flags & DDE_FLAG_LOADED);
2561 ddt_phys_clear(dde->dde_phys, DDT_PHYS_FLAT);