Lines Matching refs:dde
523 ddt_entry_t *dde) in ddt_object_lookup() argument
529 ddt->ddt_object[type][class], &dde->dde_key, in ddt_object_lookup()
530 dde->dde_phys, DDT_PHYS_SIZE(ddt))); in ddt_object_lookup()
885 ddt_phys_select(const ddt_t *ddt, const ddt_entry_t *dde, const blkptr_t *bp) in ddt_phys_select() argument
887 if (dde == NULL) in ddt_phys_select()
890 const ddt_univ_phys_t *ddp = dde->dde_phys; in ddt_phys_select()
980 ddt_entry_t *dde; in ddt_alloc() local
983 dde = kmem_cache_alloc(ddt_entry_flat_cache, KM_SLEEP); in ddt_alloc()
984 memset(dde, 0, DDT_ENTRY_FLAT_SIZE); in ddt_alloc()
986 dde = kmem_cache_alloc(ddt_entry_trad_cache, KM_SLEEP); in ddt_alloc()
987 memset(dde, 0, DDT_ENTRY_TRAD_SIZE); in ddt_alloc()
990 cv_init(&dde->dde_cv, NULL, CV_DEFAULT, NULL); in ddt_alloc()
992 dde->dde_key = *ddk; in ddt_alloc()
994 return (dde); in ddt_alloc()
998 ddt_alloc_entry_io(ddt_entry_t *dde) in ddt_alloc_entry_io() argument
1000 if (dde->dde_io != NULL) in ddt_alloc_entry_io()
1003 dde->dde_io = kmem_zalloc(sizeof (ddt_entry_io_t), KM_SLEEP); in ddt_alloc_entry_io()
1007 ddt_free(const ddt_t *ddt, ddt_entry_t *dde) in ddt_free() argument
1009 if (dde->dde_io != NULL) { in ddt_free()
1011 ASSERT3P(dde->dde_io->dde_lead_zio[p], ==, NULL); in ddt_free()
1013 if (dde->dde_io->dde_repair_abd != NULL) in ddt_free()
1014 abd_free(dde->dde_io->dde_repair_abd); in ddt_free()
1016 kmem_free(dde->dde_io, sizeof (ddt_entry_io_t)); in ddt_free()
1019 cv_destroy(&dde->dde_cv); in ddt_free()
1021 ddt_entry_flat_cache : ddt_entry_trad_cache, dde); in ddt_free()
1025 ddt_remove(ddt_t *ddt, ddt_entry_t *dde) in ddt_remove() argument
1030 if (dde->dde_flags & DDE_FLAG_LOGGED) { in ddt_remove()
1032 DDT_ENTRY_TO_LIGHTWEIGHT(ddt, dde, &ddlwe); in ddt_remove()
1036 avl_remove(&ddt->ddt_tree, dde); in ddt_remove()
1037 ddt_free(ddt, dde); in ddt_remove()
1129 ddt_entry_lookup_is_valid(ddt_t *ddt, const blkptr_t *bp, ddt_entry_t *dde) in ddt_entry_lookup_is_valid() argument
1141 dde->dde_phys->ddp_flat.ddp_dva : in ddt_entry_lookup_is_valid()
1142 dde->dde_phys->ddp_trad[ndvas].ddp_dva; in ddt_entry_lookup_is_valid()
1163 ddt_entry_t *dde; in ddt_lookup() local
1185 dde = avl_find(&ddt->ddt_tree, &search, &where); in ddt_lookup()
1186 if (dde != NULL) { in ddt_lookup()
1188 if (dde->dde_flags & DDE_FLAG_OVERQUOTA) in ddt_lookup()
1193 if (dde->dde_flags & DDE_FLAG_LOADED) { in ddt_lookup()
1194 if (!verify || ddt_entry_lookup_is_valid(ddt, bp, dde)) in ddt_lookup()
1195 return (dde); in ddt_lookup()
1200 dde->dde_waiters++; in ddt_lookup()
1202 while (!(dde->dde_flags & DDE_FLAG_LOADED)) in ddt_lookup()
1203 cv_wait(&dde->dde_cv, &ddt->ddt_lock); in ddt_lookup()
1204 dde->dde_waiters--; in ddt_lookup()
1207 if (dde->dde_flags & DDE_FLAG_OVERQUOTA) { in ddt_lookup()
1208 if (dde->dde_waiters == 0) { in ddt_lookup()
1209 avl_remove(&ddt->ddt_tree, dde); in ddt_lookup()
1210 ddt_free(ddt, dde); in ddt_lookup()
1218 if (!verify || ddt_entry_lookup_is_valid(ddt, bp, dde)) in ddt_lookup()
1219 return (dde); in ddt_lookup()
1225 dde = ddt_alloc(ddt, &search); in ddt_lookup()
1229 dde->dde_phys->ddp_flat.ddp_class_start = ddt_class_start(); in ddt_lookup()
1231 avl_insert(&ddt->ddt_tree, dde, where); in ddt_lookup()
1242 dde->dde_type = ddlwe.ddlwe_type; in ddt_lookup()
1243 dde->dde_class = ddlwe.ddlwe_class; in ddt_lookup()
1244 memcpy(dde->dde_phys, &ddlwe.ddlwe_phys, in ddt_lookup()
1248 !ddt_entry_lookup_is_valid(ddt, bp, dde)) { in ddt_lookup()
1249 avl_remove(&ddt->ddt_tree, dde); in ddt_lookup()
1250 ddt_free(ddt, dde); in ddt_lookup()
1265 dde->dde_flags = DDE_FLAG_LOADED | DDE_FLAG_LOGGED; in ddt_lookup()
1270 return (dde); in ddt_lookup()
1287 error = ddt_object_lookup(ddt, type, class, dde); in ddt_lookup()
1299 ASSERT(!(dde->dde_flags & DDE_FLAG_LOADED)); in ddt_lookup()
1301 dde->dde_type = type; /* will be DDT_TYPES if no entry found */ in ddt_lookup()
1302 dde->dde_class = class; /* will be DDT_CLASSES if no entry found */ in ddt_lookup()
1306 if (dde->dde_type == DDT_TYPES && in ddt_lookup()
1307 dde->dde_class == DDT_CLASSES && in ddt_lookup()
1310 if (dde->dde_waiters == 0) { in ddt_lookup()
1311 avl_remove(&ddt->ddt_tree, dde); in ddt_lookup()
1312 ddt_free(ddt, dde); in ddt_lookup()
1317 dde->dde_flags |= DDE_FLAG_OVERQUOTA; in ddt_lookup()
1330 valid = !verify || ddt_entry_lookup_is_valid(ddt, bp, dde); in ddt_lookup()
1331 if (!valid && dde->dde_waiters == 0) { in ddt_lookup()
1332 avl_remove(&ddt->ddt_tree, dde); in ddt_lookup()
1333 ddt_free(ddt, dde); in ddt_lookup()
1351 &ddt->ddt_histogram[dde->dde_type][dde->dde_class]; in ddt_lookup()
1354 DDT_ENTRY_TO_LIGHTWEIGHT(ddt, dde, &ddlwe); in ddt_lookup()
1362 dde->dde_flags |= DDE_FLAG_LOADED; in ddt_lookup()
1363 cv_broadcast(&dde->dde_cv); in ddt_lookup()
1365 if ((dde->dde_flags & DDE_FLAG_OVERQUOTA) || !valid) in ddt_lookup()
1368 return (dde); in ddt_lookup()
1764 ddt_entry_t *dde; in ddt_repair_start() local
1768 dde = ddt_alloc(ddt, &ddk); in ddt_repair_start()
1769 ddt_alloc_entry_io(dde); in ddt_repair_start()
1779 ddt_object_lookup(ddt, type, class, dde) == 0) in ddt_repair_start()
1780 return (dde); in ddt_repair_start()
1784 memset(dde->dde_phys, 0, DDT_PHYS_SIZE(ddt)); in ddt_repair_start()
1786 return (dde); in ddt_repair_start()
1790 ddt_repair_done(ddt_t *ddt, ddt_entry_t *dde) in ddt_repair_done() argument
1796 if (dde->dde_io->dde_repair_abd != NULL && in ddt_repair_done()
1798 avl_find(&ddt->ddt_repair_tree, dde, &where) == NULL) in ddt_repair_done()
1799 avl_insert(&ddt->ddt_repair_tree, dde, where); in ddt_repair_done()
1801 ddt_free(ddt, dde); in ddt_repair_done()
1816 ddt_repair_entry(ddt_t *ddt, ddt_entry_t *dde, ddt_entry_t *rdde, zio_t *rio) in ddt_repair_entry() argument
1818 ddt_key_t *ddk = &dde->dde_key; in ddt_repair_entry()
1827 ddt_univ_phys_t *ddp = dde->dde_phys; in ddt_repair_entry()
1860 ddt_entry_t *dde, *rdde_next, *rdde; in ddt_repair_table() local
1874 dde = ddt_repair_start(ddt, &blk); in ddt_repair_table()
1875 ddt_repair_entry(ddt, dde, rdde, rio); in ddt_repair_table()
1876 ddt_repair_done(ddt, dde); in ddt_repair_table()
2267 ddt_entry_t *dde; in ddt_sync_table_log() local
2270 while ((dde = in ddt_sync_table_log()
2272 ASSERT(dde->dde_flags & DDE_FLAG_LOADED); in ddt_sync_table_log()
2273 DDT_ENTRY_TO_LIGHTWEIGHT(ddt, dde, &ddlwe); in ddt_sync_table_log()
2276 ddt_free(ddt, dde); in ddt_sync_table_log()
2326 ddt_entry_t *dde; in ddt_sync_table_flush() local
2328 while ((dde = avl_destroy_nodes( in ddt_sync_table_flush()
2330 ASSERT(dde->dde_flags & DDE_FLAG_LOADED); in ddt_sync_table_flush()
2333 DDT_ENTRY_TO_LIGHTWEIGHT(ddt, dde, &ddlwe); in ddt_sync_table_flush()
2335 dde->dde_type, dde->dde_class, tx); in ddt_sync_table_flush()
2337 ddt_free(ddt, dde); in ddt_sync_table_flush()
2503 ddt_entry_t *dde; in ddt_addref() local
2510 dde = ddt_lookup(ddt, bp, B_TRUE); in ddt_addref()
2513 if (dde == NULL) { in ddt_addref()
2519 if ((dde->dde_type < DDT_TYPES) || (dde->dde_flags & DDE_FLAG_LOGGED)) { in ddt_addref()
2528 ddt_phys_addref(dde->dde_phys, v); in ddt_addref()
2536 ddt_remove(ddt, dde); in ddt_addref()
2592 ddt_entry_t *dde = ddt_lookup(ddt, &blk, B_TRUE); in prune_candidates_sync() local
2593 if (dde != NULL && !(dde->dde_flags & DDE_FLAG_LOGGED)) { in prune_candidates_sync()
2594 ASSERT(dde->dde_flags & DDE_FLAG_LOADED); in prune_candidates_sync()
2599 ddt_phys_clear(dde->dde_phys, DDT_PHYS_FLAT); in prune_candidates_sync()