Lines Matching refs:dde

173     ddt_entry_t *dde)
179 ddt->ddt_object[type][class], dde));
184 ddt_entry_t *dde)
190 ddt->ddt_object[type][class], dde);
195 ddt_entry_t *dde, dmu_tx_t *tx)
200 ddt->ddt_object[type][class], dde, tx));
205 ddt_entry_t *dde, dmu_tx_t *tx)
210 ddt->ddt_object[type][class], dde, tx));
215 uint64_t *walk, ddt_entry_t *dde)
220 ddt->ddt_object[type][class], dde, walk));
341 ddt_phys_select(const ddt_entry_t *dde, const blkptr_t *bp)
343 ddt_phys_t *ddp = (ddt_phys_t *)dde->dde_phys;
354 ddt_phys_total_refcnt(const ddt_entry_t *dde)
359 refcnt += dde->dde_phys[p].ddp_refcnt;
365 ddt_stat_generate(ddt_t *ddt, ddt_entry_t *dde, ddt_stat_t *dds)
368 ddt_phys_t *ddp = dde->dde_phys;
369 ddt_key_t *ddk = &dde->dde_key;
411 ddt_stat_update(ddt_t *ddt, ddt_entry_t *dde, uint64_t neg)
417 ddt_stat_generate(ddt, dde, &dds);
422 ddh = &ddt->ddt_histogram[dde->dde_type][dde->dde_class];
529 ddt_ditto_copies_needed(ddt_t *ddt, ddt_entry_t *dde, ddt_phys_t *ddp_willref)
538 ddt_phys_t *ddp = &dde->dde_phys[p];
539 zio_t *zio = dde->dde_lead_zio[p];
565 ddt_ditto_copies_present(ddt_entry_t *dde)
567 ddt_phys_t *ddp = &dde->dde_phys[DDT_PHYS_DITTO];
649 ddt_entry_t *dde;
651 dde = kmem_zalloc(sizeof (ddt_entry_t), KM_SLEEP);
652 cv_init(&dde->dde_cv, NULL, CV_DEFAULT, NULL);
654 dde->dde_key = *ddk;
656 return (dde);
660 ddt_free(ddt_entry_t *dde)
662 ASSERT(!dde->dde_loading);
665 ASSERT(dde->dde_lead_zio[p] == NULL);
667 if (dde->dde_repair_data != NULL)
668 zio_buf_free(dde->dde_repair_data,
669 DDK_GET_PSIZE(&dde->dde_key));
671 cv_destroy(&dde->dde_cv);
672 kmem_free(dde, sizeof (*dde));
676 ddt_remove(ddt_t *ddt, ddt_entry_t *dde)
680 avl_remove(&ddt->ddt_tree, dde);
681 ddt_free(dde);
687 ddt_entry_t *dde, dde_search;
697 dde = avl_find(&ddt->ddt_tree, &dde_search, &where);
698 if (dde == NULL) {
701 dde = ddt_alloc(&dde_search.dde_key);
702 avl_insert(&ddt->ddt_tree, dde, where);
705 while (dde->dde_loading)
706 cv_wait(&dde->dde_cv, &ddt->ddt_lock);
708 if (dde->dde_loaded)
709 return (dde);
711 dde->dde_loading = B_TRUE;
719 error = ddt_object_lookup(ddt, type, class, dde);
731 ASSERT(dde->dde_loaded == B_FALSE);
732 ASSERT(dde->dde_loading == B_TRUE);
734 dde->dde_type = type; /* will be DDT_TYPES if no entry found */
735 dde->dde_class = class; /* will be DDT_CLASSES if no entry found */
736 dde->dde_loaded = B_TRUE;
737 dde->dde_loading = B_FALSE;
740 ddt_stat_update(ddt, dde, -1ULL);
742 cv_broadcast(&dde->dde_cv);
744 return (dde);
751 ddt_entry_t dde;
762 ddt_key_fill(&dde.dde_key, bp);
766 ddt_object_prefetch(ddt, type, class, &dde);
878 ddt_entry_t dde;
888 ddt_key_fill(&dde.dde_key, bp);
892 if (ddt_object_lookup(ddt, type, class, &dde) == 0)
902 ddt_entry_t *dde;
906 dde = ddt_alloc(&ddk);
916 ddt_object_lookup(ddt, type, class, dde) == 0)
917 return (dde);
921 bzero(dde->dde_phys, sizeof (dde->dde_phys));
923 return (dde);
927 ddt_repair_done(ddt_t *ddt, ddt_entry_t *dde)
933 if (dde->dde_repair_data != NULL && spa_writeable(ddt->ddt_spa) &&
934 avl_find(&ddt->ddt_repair_tree, dde, &where) == NULL)
935 avl_insert(&ddt->ddt_repair_tree, dde, where);
937 ddt_free(dde);
951 ddt_repair_entry(ddt_t *ddt, ddt_entry_t *dde, ddt_entry_t *rdde, zio_t *rio)
953 ddt_phys_t *ddp = dde->dde_phys;
955 ddt_key_t *ddk = &dde->dde_key;
981 ddt_entry_t *dde, *rdde_next, *rdde;
994 dde = ddt_repair_start(ddt, &blk);
995 ddt_repair_entry(ddt, dde, rdde, rio);
996 ddt_repair_done(ddt, dde);
1003 ddt_sync_entry(ddt_t *ddt, ddt_entry_t *dde, dmu_tx_t *tx, uint64_t txg)
1006 ddt_phys_t *ddp = dde->dde_phys;
1007 ddt_key_t *ddk = &dde->dde_key;
1008 enum ddt_type otype = dde->dde_type;
1010 enum ddt_class oclass = dde->dde_class;
1014 ASSERT(dde->dde_loaded);
1015 ASSERT(!dde->dde_loading);
1018 ASSERT(dde->dde_lead_zio[p] == NULL);
1025 if (ddt_ditto_copies_needed(ddt, dde, NULL) == 0)
1034 if (dde->dde_phys[DDT_PHYS_DITTO].ddp_phys_birth != 0)
1043 VERIFY(ddt_object_remove(ddt, otype, oclass, dde, tx) == 0);
1044 ASSERT(ddt_object_lookup(ddt, otype, oclass, dde) == ENOENT);
1048 dde->dde_type = ntype;
1049 dde->dde_class = nclass;
1050 ddt_stat_update(ddt, dde, 0);
1053 VERIFY(ddt_object_update(ddt, ntype, nclass, dde, tx) == 0);
1064 ddt->ddt_checksum, dde, tx);
1073 ddt_entry_t *dde;
1087 while ((dde = avl_destroy_nodes(&ddt->ddt_tree, &cookie)) != NULL) {
1088 ddt_sync_entry(ddt, dde, tx, txg);
1089 ddt_free(dde);
1137 ddt_walk(spa_t *spa, ddt_bookmark_t *ddb, ddt_entry_t *dde)
1148 &ddb->ddb_cursor, dde);
1150 dde->dde_type = ddb->ddb_type;
1151 dde->dde_class = ddb->ddb_class;