540 load_obsolete_space_map_arg_t *losma = arg;
541 ASSERT3S(sme->sme_type, ==, SM_ALLOC);
542
543 vdev_indirect_mapping_increment_obsolete_count(losma->losma_vim,
544 sme->sme_offset, sme->sme_run, losma->losma_counts);
545
546 return (0);
547 }
548
549 /*
550 * Modify the counts (increment them) based on the spacemap.
551 */
552 void
553 vdev_indirect_mapping_load_obsolete_spacemap(vdev_indirect_mapping_t *vim,
554 uint32_t *counts, space_map_t *obsolete_space_sm)
555 {
556 load_obsolete_space_map_arg_t losma;
557 losma.losma_counts = counts;
558 losma.losma_vim = vim;
559 VERIFY0(space_map_iterate(obsolete_space_sm,
560 load_obsolete_sm_callback, &losma));
561 }
562
563 /*
564 * Read the obsolete counts from disk, returning them in an array.
565 */
566 uint32_t *
567 vdev_indirect_mapping_load_obsolete_counts(vdev_indirect_mapping_t *vim)
568 {
569 ASSERT(vdev_indirect_mapping_verify(vim));
570
571 uint64_t counts_size =
572 vim->vim_phys->vimp_num_entries * sizeof (uint32_t);
573 uint32_t *counts = kmem_alloc(counts_size, KM_SLEEP);
574 if (vim->vim_havecounts) {
575 VERIFY0(dmu_read(vim->vim_objset,
576 vim->vim_phys->vimp_counts_object,
577 0, counts_size,
578 counts, DMU_READ_PREFETCH));
579 } else {
|
540 load_obsolete_space_map_arg_t *losma = arg;
541 ASSERT3S(sme->sme_type, ==, SM_ALLOC);
542
543 vdev_indirect_mapping_increment_obsolete_count(losma->losma_vim,
544 sme->sme_offset, sme->sme_run, losma->losma_counts);
545
546 return (0);
547 }
548
549 /*
550 * Modify the counts (increment them) based on the spacemap.
551 */
552 void
553 vdev_indirect_mapping_load_obsolete_spacemap(vdev_indirect_mapping_t *vim,
554 uint32_t *counts, space_map_t *obsolete_space_sm)
555 {
556 load_obsolete_space_map_arg_t losma;
557 losma.losma_counts = counts;
558 losma.losma_vim = vim;
559 VERIFY0(space_map_iterate(obsolete_space_sm,
560 space_map_length(obsolete_space_sm),
561 load_obsolete_sm_callback, &losma));
562 }
563
564 /*
565 * Read the obsolete counts from disk, returning them in an array.
566 */
567 uint32_t *
568 vdev_indirect_mapping_load_obsolete_counts(vdev_indirect_mapping_t *vim)
569 {
570 ASSERT(vdev_indirect_mapping_verify(vim));
571
572 uint64_t counts_size =
573 vim->vim_phys->vimp_num_entries * sizeof (uint32_t);
574 uint32_t *counts = kmem_alloc(counts_size, KM_SLEEP);
575 if (vim->vim_havecounts) {
576 VERIFY0(dmu_read(vim->vim_objset,
577 vim->vim_phys->vimp_counts_object,
578 0, counts_size,
579 counts, DMU_READ_PREFETCH));
580 } else {
|