Lines Matching defs:dde

174     ddt_entry_t *dde)
180 ddt->ddt_object[type][class], dde));
185 ddt_entry_t *dde)
191 ddt->ddt_object[type][class], dde);
196 ddt_entry_t *dde, dmu_tx_t *tx)
201 ddt->ddt_object[type][class], dde, tx));
206 ddt_entry_t *dde, dmu_tx_t *tx)
211 ddt->ddt_object[type][class], dde, tx));
216 uint64_t *walk, ddt_entry_t *dde)
221 ddt->ddt_object[type][class], dde, walk));
342 ddt_phys_select(const ddt_entry_t *dde, const blkptr_t *bp)
344 ddt_phys_t *ddp = (ddt_phys_t *)dde->dde_phys;
355 ddt_phys_total_refcnt(const ddt_entry_t *dde)
360 refcnt += dde->dde_phys[p].ddp_refcnt;
366 ddt_stat_generate(ddt_t *ddt, ddt_entry_t *dde, ddt_stat_t *dds)
369 ddt_phys_t *ddp = dde->dde_phys;
370 ddt_key_t *ddk = &dde->dde_key;
412 ddt_stat_update(ddt_t *ddt, ddt_entry_t *dde, uint64_t neg)
418 ddt_stat_generate(ddt, dde, &dds);
423 ddh = &ddt->ddt_histogram[dde->dde_type][dde->dde_class];
530 ddt_ditto_copies_needed(ddt_t *ddt, ddt_entry_t *dde, ddt_phys_t *ddp_willref)
539 ddt_phys_t *ddp = &dde->dde_phys[p];
540 zio_t *zio = dde->dde_lead_zio[p];
566 ddt_ditto_copies_present(ddt_entry_t *dde)
568 ddt_phys_t *ddp = &dde->dde_phys[DDT_PHYS_DITTO];
646 ddt_entry_t *dde;
648 dde = kmem_zalloc(sizeof (ddt_entry_t), KM_SLEEP);
649 cv_init(&dde->dde_cv, NULL, CV_DEFAULT, NULL);
651 dde->dde_key = *ddk;
653 return (dde);
657 ddt_free(ddt_entry_t *dde)
659 ASSERT(!dde->dde_loading);
662 ASSERT(dde->dde_lead_zio[p] == NULL);
664 if (dde->dde_repair_data != NULL)
665 zio_buf_free(dde->dde_repair_data,
666 DDK_GET_PSIZE(&dde->dde_key));
668 cv_destroy(&dde->dde_cv);
669 kmem_free(dde, sizeof (*dde));
673 ddt_remove(ddt_t *ddt, ddt_entry_t *dde)
677 avl_remove(&ddt->ddt_tree, dde);
678 ddt_free(dde);
684 ddt_entry_t *dde, dde_search;
694 dde = avl_find(&ddt->ddt_tree, &dde_search, &where);
695 if (dde == NULL) {
698 dde = ddt_alloc(&dde_search.dde_key);
699 avl_insert(&ddt->ddt_tree, dde, where);
702 while (dde->dde_loading)
703 cv_wait(&dde->dde_cv, &ddt->ddt_lock);
705 if (dde->dde_loaded)
706 return (dde);
708 dde->dde_loading = B_TRUE;
716 error = ddt_object_lookup(ddt, type, class, dde);
728 ASSERT(dde->dde_loaded == B_FALSE);
729 ASSERT(dde->dde_loading == B_TRUE);
731 dde->dde_type = type; /* will be DDT_TYPES if no entry found */
732 dde->dde_class = class; /* will be DDT_CLASSES if no entry found */
733 dde->dde_loaded = B_TRUE;
734 dde->dde_loading = B_FALSE;
737 ddt_stat_update(ddt, dde, -1ULL);
739 cv_broadcast(&dde->dde_cv);
741 return (dde);
748 ddt_entry_t dde;
759 ddt_key_fill(&dde.dde_key, bp);
763 ddt_object_prefetch(ddt, type, class, &dde);
875 ddt_entry_t dde;
885 ddt_key_fill(&dde.dde_key, bp);
889 if (ddt_object_lookup(ddt, type, class, &dde) == 0)
899 ddt_entry_t *dde;
903 dde = ddt_alloc(&ddk);
913 ddt_object_lookup(ddt, type, class, dde) == 0)
914 return (dde);
918 bzero(dde->dde_phys, sizeof (dde->dde_phys));
920 return (dde);
924 ddt_repair_done(ddt_t *ddt, ddt_entry_t *dde)
930 if (dde->dde_repair_data != NULL && spa_writeable(ddt->ddt_spa) &&
931 avl_find(&ddt->ddt_repair_tree, dde, &where) == NULL)
932 avl_insert(&ddt->ddt_repair_tree, dde, where);
934 ddt_free(dde);
948 ddt_repair_entry(ddt_t *ddt, ddt_entry_t *dde, ddt_entry_t *rdde, zio_t *rio)
950 ddt_phys_t *ddp = dde->dde_phys;
952 ddt_key_t *ddk = &dde->dde_key;
978 ddt_entry_t *dde, *rdde_next, *rdde;
991 dde = ddt_repair_start(ddt, &blk);
992 ddt_repair_entry(ddt, dde, rdde, rio);
993 ddt_repair_done(ddt, dde);
1000 ddt_sync_entry(ddt_t *ddt, ddt_entry_t *dde, dmu_tx_t *tx, uint64_t txg)
1003 ddt_phys_t *ddp = dde->dde_phys;
1004 ddt_key_t *ddk = &dde->dde_key;
1005 enum ddt_type otype = dde->dde_type;
1007 enum ddt_class oclass = dde->dde_class;
1011 ASSERT(dde->dde_loaded);
1012 ASSERT(!dde->dde_loading);
1015 ASSERT(dde->dde_lead_zio[p] == NULL);
1022 if (ddt_ditto_copies_needed(ddt, dde, NULL) == 0)
1031 if (dde->dde_phys[DDT_PHYS_DITTO].ddp_phys_birth != 0)
1040 VERIFY(ddt_object_remove(ddt, otype, oclass, dde, tx) == 0);
1041 ASSERT(ddt_object_lookup(ddt, otype, oclass, dde) == ENOENT);
1045 dde->dde_type = ntype;
1046 dde->dde_class = nclass;
1047 ddt_stat_update(ddt, dde, 0);
1050 VERIFY(ddt_object_update(ddt, ntype, nclass, dde, tx) == 0);
1061 ddt->ddt_checksum, dde, tx);
1070 ddt_entry_t *dde;
1084 while ((dde = avl_destroy_nodes(&ddt->ddt_tree, &cookie)) != NULL) {
1085 ddt_sync_entry(ddt, dde, tx, txg);
1086 ddt_free(dde);
1134 ddt_walk(spa_t *spa, ddt_bookmark_t *ddb, ddt_entry_t *dde)
1145 &ddb->ddb_cursor, dde);
1147 dde->dde_type = ddb->ddb_type;
1148 dde->dde_class = ddb->ddb_class;