Lines Matching defs:dde

160     ddt_entry_t *dde)
166 ddt->ddt_object[type][class], dde));
171 ddt_entry_t *dde)
177 ddt->ddt_object[type][class], dde);
182 ddt_entry_t *dde, dmu_tx_t *tx)
187 ddt->ddt_object[type][class], dde, tx));
192 ddt_entry_t *dde, dmu_tx_t *tx)
197 ddt->ddt_object[type][class], dde, tx));
202 uint64_t *walk, ddt_entry_t *dde)
207 ddt->ddt_object[type][class], dde, walk));
328 ddt_phys_select(const ddt_entry_t *dde, const blkptr_t *bp)
330 ddt_phys_t *ddp = (ddt_phys_t *)dde->dde_phys;
341 ddt_phys_total_refcnt(const ddt_entry_t *dde)
346 refcnt += dde->dde_phys[p].ddp_refcnt;
352 ddt_stat_generate(ddt_t *ddt, ddt_entry_t *dde, ddt_stat_t *dds)
355 ddt_phys_t *ddp = dde->dde_phys;
356 ddt_key_t *ddk = &dde->dde_key;
398 ddt_stat_update(ddt_t *ddt, ddt_entry_t *dde, uint64_t neg)
404 ddt_stat_generate(ddt, dde, &dds);
409 ddh = &ddt->ddt_histogram[dde->dde_type][dde->dde_class];
516 ddt_ditto_copies_needed(ddt_t *ddt, ddt_entry_t *dde, ddt_phys_t *ddp_willref)
525 ddt_phys_t *ddp = &dde->dde_phys[p];
526 zio_t *zio = dde->dde_lead_zio[p];
552 ddt_ditto_copies_present(ddt_entry_t *dde)
554 ddt_phys_t *ddp = &dde->dde_phys[DDT_PHYS_DITTO];
636 ddt_entry_t *dde;
638 dde = kmem_zalloc(sizeof (ddt_entry_t), KM_SLEEP);
639 cv_init(&dde->dde_cv, NULL, CV_DEFAULT, NULL);
641 dde->dde_key = *ddk;
643 return (dde);
647 ddt_free(ddt_entry_t *dde)
649 ASSERT(!dde->dde_loading);
652 ASSERT(dde->dde_lead_zio[p] == NULL);
654 if (dde->dde_repair_data != NULL)
655 zio_buf_free(dde->dde_repair_data,
656 DDK_GET_PSIZE(&dde->dde_key));
658 cv_destroy(&dde->dde_cv);
659 kmem_free(dde, sizeof (*dde));
663 ddt_remove(ddt_t *ddt, ddt_entry_t *dde)
667 avl_remove(&ddt->ddt_tree, dde);
668 ddt_free(dde);
674 ddt_entry_t *dde, dde_search;
684 dde = avl_find(&ddt->ddt_tree, &dde_search, &where);
685 if (dde == NULL) {
688 dde = ddt_alloc(&dde_search.dde_key);
689 avl_insert(&ddt->ddt_tree, dde, where);
692 while (dde->dde_loading)
693 cv_wait(&dde->dde_cv, &ddt->ddt_lock);
695 if (dde->dde_loaded)
696 return (dde);
698 dde->dde_loading = B_TRUE;
706 error = ddt_object_lookup(ddt, type, class, dde);
718 ASSERT(dde->dde_loaded == B_FALSE);
719 ASSERT(dde->dde_loading == B_TRUE);
721 dde->dde_type = type; /* will be DDT_TYPES if no entry found */
722 dde->dde_class = class; /* will be DDT_CLASSES if no entry found */
723 dde->dde_loaded = B_TRUE;
724 dde->dde_loading = B_FALSE;
727 ddt_stat_update(ddt, dde, -1ULL);
729 cv_broadcast(&dde->dde_cv);
731 return (dde);
738 ddt_entry_t dde;
749 ddt_key_fill(&dde.dde_key, bp);
753 ddt_object_prefetch(ddt, type, class, &dde);
865 ddt_entry_t dde;
875 ddt_key_fill(&dde.dde_key, bp);
879 if (ddt_object_lookup(ddt, type, class, &dde) == 0)
889 ddt_entry_t *dde;
893 dde = ddt_alloc(&ddk);
903 ddt_object_lookup(ddt, type, class, dde) == 0)
904 return (dde);
908 bzero(dde->dde_phys, sizeof (dde->dde_phys));
910 return (dde);
914 ddt_repair_done(ddt_t *ddt, ddt_entry_t *dde)
920 if (dde->dde_repair_data != NULL && spa_writeable(ddt->ddt_spa) &&
921 avl_find(&ddt->ddt_repair_tree, dde, &where) == NULL)
922 avl_insert(&ddt->ddt_repair_tree, dde, where);
924 ddt_free(dde);
938 ddt_repair_entry(ddt_t *ddt, ddt_entry_t *dde, ddt_entry_t *rdde, zio_t *rio)
940 ddt_phys_t *ddp = dde->dde_phys;
942 ddt_key_t *ddk = &dde->dde_key;
968 ddt_entry_t *dde, *rdde_next, *rdde;
981 dde = ddt_repair_start(ddt, &blk);
982 ddt_repair_entry(ddt, dde, rdde, rio);
983 ddt_repair_done(ddt, dde);
990 ddt_sync_entry(ddt_t *ddt, ddt_entry_t *dde, dmu_tx_t *tx, uint64_t txg)
993 ddt_phys_t *ddp = dde->dde_phys;
994 ddt_key_t *ddk = &dde->dde_key;
995 enum ddt_type otype = dde->dde_type;
997 enum ddt_class oclass = dde->dde_class;
1001 ASSERT(dde->dde_loaded);
1002 ASSERT(!dde->dde_loading);
1005 ASSERT(dde->dde_lead_zio[p] == NULL);
1012 if (ddt_ditto_copies_needed(ddt, dde, NULL) == 0)
1021 if (dde->dde_phys[DDT_PHYS_DITTO].ddp_phys_birth != 0)
1030 VERIFY(ddt_object_remove(ddt, otype, oclass, dde, tx) == 0);
1031 ASSERT(ddt_object_lookup(ddt, otype, oclass, dde) == ENOENT);
1035 dde->dde_type = ntype;
1036 dde->dde_class = nclass;
1037 ddt_stat_update(ddt, dde, 0);
1040 VERIFY(ddt_object_update(ddt, ntype, nclass, dde, tx) == 0);
1051 ddt->ddt_checksum, dde, tx);
1060 ddt_entry_t *dde;
1074 while ((dde = avl_destroy_nodes(&ddt->ddt_tree, &cookie)) != NULL) {
1075 ddt_sync_entry(ddt, dde, tx, txg);
1076 ddt_free(dde);
1122 ddt_walk(spa_t *spa, ddt_bookmark_t *ddb, ddt_entry_t *dde)
1133 &ddb->ddb_cursor, dde);
1135 dde->dde_type = ddb->ddb_type;
1136 dde->dde_class = ddb->ddb_class;