Print this page
3748 zfs headers should be C++ compatible
Submitted by:   Justin Gibbs <justing@spectralogic.com>
Submitted by:   Will Andrews <willa@spectralogic.com>
Reviewed by:    Matthew Ahrens <mahrens@delphix.com>


 161 {
 162         if (!ddt_object_exists(ddt, type, class))
 163                 return (SET_ERROR(ENOENT));
 164 
 165         return (ddt_ops[type]->ddt_op_lookup(ddt->ddt_os,
 166             ddt->ddt_object[type][class], dde));
 167 }
 168 
 169 static void
 170 ddt_object_prefetch(ddt_t *ddt, enum ddt_type type, enum ddt_class class,
 171     ddt_entry_t *dde)
 172 {
 173         if (!ddt_object_exists(ddt, type, class))
 174                 return;
 175 
 176         ddt_ops[type]->ddt_op_prefetch(ddt->ddt_os,
 177             ddt->ddt_object[type][class], dde);
 178 }
 179 
 180 int
 181 ddt_object_update(ddt_t *ddt, enum ddt_type type, enum ddt_class class,
 182     ddt_entry_t *dde, dmu_tx_t *tx)
 183 {
 184         ASSERT(ddt_object_exists(ddt, type, class));
 185 
 186         return (ddt_ops[type]->ddt_op_update(ddt->ddt_os,
 187             ddt->ddt_object[type][class], dde, tx));
 188 }
 189 
 190 static int
 191 ddt_object_remove(ddt_t *ddt, enum ddt_type type, enum ddt_class class,
 192     ddt_entry_t *dde, dmu_tx_t *tx)
 193 {
 194         ASSERT(ddt_object_exists(ddt, type, class));
 195 
 196         return (ddt_ops[type]->ddt_op_remove(ddt->ddt_os,
 197             ddt->ddt_object[type][class], dde, tx));
 198 }
 199 
 200 int
 201 ddt_object_walk(ddt_t *ddt, enum ddt_type type, enum ddt_class class,
 202     uint64_t *walk, ddt_entry_t *dde)
 203 {
 204         ASSERT(ddt_object_exists(ddt, type, class));
 205 
 206         return (ddt_ops[type]->ddt_op_walk(ddt->ddt_os,
 207             ddt->ddt_object[type][class], dde, walk));
 208 }
 209 
 210 uint64_t
 211 ddt_object_count(ddt_t *ddt, enum ddt_type type, enum ddt_class class)
 212 {
 213         ASSERT(ddt_object_exists(ddt, type, class));
 214 
 215         return (ddt_ops[type]->ddt_op_count(ddt->ddt_os,
 216             ddt->ddt_object[type][class]));
 217 }
 218 
 219 int
 220 ddt_object_info(ddt_t *ddt, enum ddt_type type, enum ddt_class class,
 221     dmu_object_info_t *doi)
 222 {
 223         if (!ddt_object_exists(ddt, type, class))
 224                 return (SET_ERROR(ENOENT));
 225 
 226         return (dmu_object_info(ddt->ddt_os, ddt->ddt_object[type][class],
 227             doi));
 228 }
 229 
 230 boolean_t
 231 ddt_object_exists(ddt_t *ddt, enum ddt_type type, enum ddt_class class)
 232 {
 233         return (!!ddt->ddt_object[type][class]);
 234 }
 235 
 236 void
 237 ddt_object_name(ddt_t *ddt, enum ddt_type type, enum ddt_class class,
 238     char *name)
 239 {
 240         (void) sprintf(name, DMU_POOL_DDT,
 241             zio_checksum_table[ddt->ddt_checksum].ci_name,
 242             ddt_ops[type]->ddt_op_name, ddt_class_name[class]);
 243 }
 244 
 245 void
 246 ddt_bp_fill(const ddt_phys_t *ddp, blkptr_t *bp, uint64_t txg)
 247 {
 248         ASSERT(txg != 0);
 249 
 250         for (int d = 0; d < SPA_DVAS_PER_BP; d++)
 251                 bp->blk_dva[d] = ddp->ddp_dva[d];
 252         BP_SET_BIRTH(bp, txg, ddp->ddp_phys_birth);
 253 }
 254 
 255 void
 256 ddt_bp_create(enum zio_checksum checksum,
 257     const ddt_key_t *ddk, const ddt_phys_t *ddp, blkptr_t *bp)
 258 {
 259         BP_ZERO(bp);
 260 
 261         if (ddp != NULL)
 262                 ddt_bp_fill(ddp, bp, ddp->ddp_phys_birth);




 161 {
 162         if (!ddt_object_exists(ddt, type, class))
 163                 return (SET_ERROR(ENOENT));
 164 
 165         return (ddt_ops[type]->ddt_op_lookup(ddt->ddt_os,
 166             ddt->ddt_object[type][class], dde));
 167 }
 168 
 169 static void
 170 ddt_object_prefetch(ddt_t *ddt, enum ddt_type type, enum ddt_class class,
 171     ddt_entry_t *dde)
 172 {
 173         if (!ddt_object_exists(ddt, type, class))
 174                 return;
 175 
 176         ddt_ops[type]->ddt_op_prefetch(ddt->ddt_os,
 177             ddt->ddt_object[type][class], dde);
 178 }
 179 
 180 int
 181 ddt_object_update(ddt_t *ddt, enum ddt_type type, enum ddt_class ddt_class,
 182     ddt_entry_t *dde, dmu_tx_t *tx)
 183 {
 184         ASSERT(ddt_object_exists(ddt, type, ddt_class));
 185 
 186         return (ddt_ops[type]->ddt_op_update(ddt->ddt_os,
 187             ddt->ddt_object[type][ddt_class], dde, tx));
 188 }
 189 
 190 static int
 191 ddt_object_remove(ddt_t *ddt, enum ddt_type type, enum ddt_class class,
 192     ddt_entry_t *dde, dmu_tx_t *tx)
 193 {
 194         ASSERT(ddt_object_exists(ddt, type, class));
 195 
 196         return (ddt_ops[type]->ddt_op_remove(ddt->ddt_os,
 197             ddt->ddt_object[type][class], dde, tx));
 198 }
 199 
 200 int
 201 ddt_object_walk(ddt_t *ddt, enum ddt_type type, enum ddt_class ddt_class,
 202     uint64_t *walk, ddt_entry_t *dde)
 203 {
 204         ASSERT(ddt_object_exists(ddt, type, ddt_class));
 205 
 206         return (ddt_ops[type]->ddt_op_walk(ddt->ddt_os,
 207             ddt->ddt_object[type][ddt_class], dde, walk));
 208 }
 209 
 210 uint64_t
 211 ddt_object_count(ddt_t *ddt, enum ddt_type type, enum ddt_class ddt_class)
 212 {
 213         ASSERT(ddt_object_exists(ddt, type, ddt_class));
 214 
 215         return (ddt_ops[type]->ddt_op_count(ddt->ddt_os,
 216             ddt->ddt_object[type][ddt_class]));
 217 }
 218 
 219 int
 220 ddt_object_info(ddt_t *ddt, enum ddt_type type, enum ddt_class ddt_class,
 221     dmu_object_info_t *doi)
 222 {
 223         if (!ddt_object_exists(ddt, type, ddt_class))
 224                 return (SET_ERROR(ENOENT));
 225 
 226         return (dmu_object_info(ddt->ddt_os, ddt->ddt_object[type][ddt_class],
 227             doi));
 228 }
 229 
 230 boolean_t
 231 ddt_object_exists(ddt_t *ddt, enum ddt_type type, enum ddt_class ddt_class)
 232 {
 233         return (!!ddt->ddt_object[type][ddt_class]);
 234 }
 235 
 236 void
 237 ddt_object_name(ddt_t *ddt, enum ddt_type type, enum ddt_class ddt_class,
 238     char *name)
 239 {
 240         (void) sprintf(name, DMU_POOL_DDT,
 241             zio_checksum_table[ddt->ddt_checksum].ci_name,
 242             ddt_ops[type]->ddt_op_name, ddt_class_name[ddt_class]);
 243 }
 244 
 245 void
 246 ddt_bp_fill(const ddt_phys_t *ddp, blkptr_t *bp, uint64_t txg)
 247 {
 248         ASSERT(txg != 0);
 249 
 250         for (int d = 0; d < SPA_DVAS_PER_BP; d++)
 251                 bp->blk_dva[d] = ddp->ddp_dva[d];
 252         BP_SET_BIRTH(bp, txg, ddp->ddp_phys_birth);
 253 }
 254 
 255 void
 256 ddt_bp_create(enum zio_checksum checksum,
 257     const ddt_key_t *ddk, const ddt_phys_t *ddp, blkptr_t *bp)
 258 {
 259         BP_ZERO(bp);
 260 
 261         if (ddp != NULL)
 262                 ddt_bp_fill(ddp, bp, ddp->ddp_phys_birth);