Lines Matching +full:write +full:- +full:1 +full:- +full:bps

1 // SPDX-License-Identifier: CDDL-1.0
10 * or https://opensource.org/licenses/CDDL-1.0.
46 ASSERT0(dp->dp_empty_bpobj); in bpobj_alloc_empty()
47 dp->dp_empty_bpobj = in bpobj_alloc_empty()
51 DMU_POOL_EMPTY_BPOBJ, sizeof (uint64_t), 1, in bpobj_alloc_empty()
52 &dp->dp_empty_bpobj, tx) == 0); in bpobj_alloc_empty()
55 ASSERT(dp->dp_empty_bpobj != 0); in bpobj_alloc_empty()
56 return (dp->dp_empty_bpobj); in bpobj_alloc_empty()
70 VERIFY3U(0, ==, zap_remove(dp->dp_meta_objset, in bpobj_decr_empty()
73 VERIFY3U(0, ==, dmu_object_free(os, dp->dp_empty_bpobj, tx)); in bpobj_decr_empty()
74 dp->dp_empty_bpobj = 0; in bpobj_decr_empty()
106 ASSERT(obj != dmu_objset_pool(os)->dp_empty_bpobj); in bpobj_free()
111 if (!bpo.bpo_havesubobj || bpo.bpo_phys->bpo_subobjs == 0) in bpobj_free()
114 VERIFY3U(0, ==, dmu_object_info(os, bpo.bpo_phys->bpo_subobjs, &doi)); in bpobj_free()
117 for (i = bpo.bpo_phys->bpo_num_subobjs - 1; i >= 0; i--) { in bpobj_free()
124 if (dbuf == NULL || dbuf->db_offset > offset) { in bpobj_free()
128 bpo.bpo_phys->bpo_subobjs, offset, FTAG, &dbuf, 0)); in bpobj_free()
131 ASSERT3U(offset, >=, dbuf->db_offset); in bpobj_free()
132 ASSERT3U(offset, <, dbuf->db_offset + dbuf->db_size); in bpobj_free()
134 objarray = dbuf->db_data; in bpobj_free()
141 VERIFY3U(0, ==, dmu_object_free(os, bpo.bpo_phys->bpo_subobjs, tx)); in bpobj_free()
161 mutex_init(&bpo->bpo_lock, NULL, MUTEX_DEFAULT, NULL); in bpobj_open()
163 ASSERT0P(bpo->bpo_dbuf); in bpobj_open()
164 ASSERT0P(bpo->bpo_phys); in bpobj_open()
169 err = dmu_bonus_hold(os, object, bpo, &bpo->bpo_dbuf); in bpobj_open()
173 bpo->bpo_os = os; in bpobj_open()
174 bpo->bpo_object = object; in bpobj_open()
175 bpo->bpo_epb = doi.doi_data_block_size >> SPA_BLKPTRSHIFT; in bpobj_open()
176 bpo->bpo_havecomp = (doi.doi_bonus_size > BPOBJ_SIZE_V0); in bpobj_open()
177 bpo->bpo_havesubobj = (doi.doi_bonus_size > BPOBJ_SIZE_V1); in bpobj_open()
178 bpo->bpo_havefreed = (doi.doi_bonus_size > BPOBJ_SIZE_V2); in bpobj_open()
179 bpo->bpo_phys = bpo->bpo_dbuf->db_data; in bpobj_open()
186 return (bpo->bpo_object != 0); in bpobj_is_open()
193 if (bpo->bpo_object == 0) in bpobj_close()
196 dmu_buf_rele(bpo->bpo_dbuf, bpo); in bpobj_close()
197 if (bpo->bpo_cached_dbuf != NULL) in bpobj_close()
198 dmu_buf_rele(bpo->bpo_cached_dbuf, bpo); in bpobj_close()
199 bpo->bpo_dbuf = NULL; in bpobj_close()
200 bpo->bpo_phys = NULL; in bpobj_close()
201 bpo->bpo_cached_dbuf = NULL; in bpobj_close()
202 bpo->bpo_object = 0; in bpobj_close()
204 mutex_destroy(&bpo->bpo_lock); in bpobj_close()
210 ASSERT(MUTEX_HELD(&bpo->bpo_lock)); in bpobj_is_empty_impl()
211 return (bpo->bpo_phys->bpo_num_blkptrs == 0 && in bpobj_is_empty_impl()
212 (!bpo->bpo_havesubobj || bpo->bpo_phys->bpo_num_subobjs == 0)); in bpobj_is_empty_impl()
218 mutex_enter(&bpo->bpo_lock); in bpobj_is_empty()
220 mutex_exit(&bpo->bpo_lock); in bpobj_is_empty()
241 /* True after having visited this bpo's directly referenced BPs. */
250 bpi->bpi_bpo = bpo; in bpi_alloc()
251 bpi->bpi_parent = parent; in bpi_alloc()
252 bpi->bpi_index = index; in bpi_alloc()
253 if (bpo->bpo_havesubobj && bpo->bpo_phys->bpo_subobjs != 0) { in bpi_alloc()
254 bpi->bpi_unprocessed_subobjs = bpo->bpo_phys->bpo_num_subobjs; in bpi_alloc()
267 for (; bpi != NULL; bpi = bpi->bpi_parent) { in propagate_space_reduction()
268 bpobj_t *p = bpi->bpi_bpo; in propagate_space_reduction()
269 ASSERT(dmu_buf_is_dirty(p->bpo_dbuf, tx)); in propagate_space_reduction()
270 p->bpo_phys->bpo_bytes -= freed; in propagate_space_reduction()
271 ASSERT3S(p->bpo_phys->bpo_bytes, >=, 0); in propagate_space_reduction()
272 if (p->bpo_havecomp) { in propagate_space_reduction()
273 p->bpo_phys->bpo_comp -= comp_freed; in propagate_space_reduction()
274 p->bpo_phys->bpo_uncomp -= uncomp_freed; in propagate_space_reduction()
286 bpobj_t *bpo = bpi->bpi_bpo; in bpobj_iterate_blkptrs()
288 int64_t i = bpo->bpo_phys->bpo_num_blkptrs - 1; in bpobj_iterate_blkptrs()
289 uint64_t pe = P2ALIGN_TYPED(i, bpo->bpo_epb, uint64_t) * in bpobj_iterate_blkptrs()
292 uint64_t pb = MAX((pe > dmu_prefetch_max) ? pe - dmu_prefetch_max : 0, in bpobj_iterate_blkptrs()
295 dmu_prefetch(bpo->bpo_os, bpo->bpo_object, 0, pb, pe - pb, in bpobj_iterate_blkptrs()
298 for (; i >= start; i--) { in bpobj_iterate_blkptrs()
300 uint64_t blkoff = P2PHASE(i, bpo->bpo_epb); in bpobj_iterate_blkptrs()
302 if (dbuf == NULL || dbuf->db_offset > offset) { in bpobj_iterate_blkptrs()
305 err = dmu_buf_hold(bpo->bpo_os, bpo->bpo_object, in bpobj_iterate_blkptrs()
310 pb = MAX((dbuf->db_offset > dmu_prefetch_max) ? in bpobj_iterate_blkptrs()
311 dbuf->db_offset - dmu_prefetch_max : 0, ps); in bpobj_iterate_blkptrs()
313 dmu_prefetch(bpo->bpo_os, bpo->bpo_object, 0, in bpobj_iterate_blkptrs()
314 pb, pe - pb, ZIO_PRIORITY_ASYNC_READ); in bpobj_iterate_blkptrs()
318 ASSERT3U(offset, >=, dbuf->db_offset); in bpobj_iterate_blkptrs()
319 ASSERT3U(offset, <, dbuf->db_offset + dbuf->db_size); in bpobj_iterate_blkptrs()
321 blkptr_t *bparray = dbuf->db_data; in bpobj_iterate_blkptrs()
330 int sign = bp_freed ? -1 : +1; in bpobj_iterate_blkptrs()
331 spa_t *spa = dmu_objset_spa(bpo->bpo_os); in bpobj_iterate_blkptrs()
335 ASSERT(dmu_buf_is_dirty(bpo->bpo_dbuf, tx)); in bpobj_iterate_blkptrs()
336 bpo->bpo_phys->bpo_num_blkptrs--; in bpobj_iterate_blkptrs()
337 ASSERT3S(bpo->bpo_phys->bpo_num_blkptrs, >=, 0); in bpobj_iterate_blkptrs()
339 ASSERT(bpo->bpo_havefreed); in bpobj_iterate_blkptrs()
340 bpo->bpo_phys->bpo_num_freed--; in bpobj_iterate_blkptrs()
341 ASSERT3S(bpo->bpo_phys->bpo_num_freed, >=, 0); in bpobj_iterate_blkptrs()
348 VERIFY0(dmu_free_range(bpo->bpo_os, in bpobj_iterate_blkptrs()
349 bpo->bpo_object, in bpobj_iterate_blkptrs()
350 bpo->bpo_phys->bpo_num_blkptrs * sizeof (blkptr_t), in bpobj_iterate_blkptrs()
361 * Given an initial bpo, start by freeing the BPs that are directly referenced
365 * requested also free the now-empty bpo from disk and decrement
383 mutex_enter(&initial_bpo->bpo_lock); in bpobj_iterate_impl()
386 *bpobj_size = initial_bpo->bpo_phys->bpo_num_blkptrs; in bpobj_iterate_impl()
391 bpobj_t *bpo = bpi->bpi_bpo; in bpobj_iterate_impl()
394 ASSERT(MUTEX_HELD(&bpo->bpo_lock)); in bpobj_iterate_impl()
398 dmu_buf_will_dirty(bpo->bpo_dbuf, tx); in bpobj_iterate_impl()
400 if (bpi->bpi_visited == B_FALSE) { in bpobj_iterate_impl()
403 bpi->bpi_visited = B_TRUE; in bpobj_iterate_impl()
408 * We've finished with this bpo's directly-referenced BP's and in bpobj_iterate_impl()
413 if (bpi->bpi_unprocessed_subobjs == 0) { in bpobj_iterate_impl()
419 ASSERT0(bpo->bpo_phys->bpo_bytes); in bpobj_iterate_impl()
420 ASSERT0(bpo->bpo_phys->bpo_comp); in bpobj_iterate_impl()
421 ASSERT0(bpo->bpo_phys->bpo_uncomp); in bpobj_iterate_impl()
425 if (bpi->bpi_parent != NULL) { in bpobj_iterate_impl()
427 bpobj_t *p = bpi->bpi_parent->bpi_bpo; in bpobj_iterate_impl()
429 ASSERT0(bpo->bpo_phys->bpo_num_blkptrs); in bpobj_iterate_impl()
430 ASSERT3U(p->bpo_phys->bpo_num_subobjs, in bpobj_iterate_impl()
432 ASSERT3U(bpi->bpi_index, ==, in bpobj_iterate_impl()
433 p->bpo_phys->bpo_num_subobjs - 1); in bpobj_iterate_impl()
434 ASSERT(dmu_buf_is_dirty(bpo->bpo_dbuf, in bpobj_iterate_impl()
437 p->bpo_phys->bpo_num_subobjs--; in bpobj_iterate_impl()
439 VERIFY0(dmu_free_range(p->bpo_os, in bpobj_iterate_impl()
440 p->bpo_phys->bpo_subobjs, in bpobj_iterate_impl()
441 bpi->bpi_index * sizeof (uint64_t), in bpobj_iterate_impl()
445 if (bpo->bpo_havesubobj && in bpobj_iterate_impl()
446 bpo->bpo_phys->bpo_subobjs != 0) { in bpobj_iterate_impl()
447 ASSERT0(bpo->bpo_phys-> in bpobj_iterate_impl()
450 bpo->bpo_os, in bpobj_iterate_impl()
451 bpo->bpo_phys->bpo_subobjs, in bpobj_iterate_impl()
455 bpo->bpo_phys->bpo_subobjs = 0; in bpobj_iterate_impl()
457 err = dmu_object_free(p->bpo_os, in bpobj_iterate_impl()
458 bpo->bpo_object, tx); in bpobj_iterate_impl()
463 mutex_exit(&bpo->bpo_lock); in bpobj_iterate_impl()
467 mutex_exit(&bpo->bpo_lock); in bpobj_iterate_impl()
480 ASSERT(bpo->bpo_havecomp); in bpobj_iterate_impl()
484 int64_t i = bpi->bpi_unprocessed_subobjs - 1; in bpobj_iterate_impl()
488 err = dmu_read(bpo->bpo_os, bpo->bpo_phys->bpo_subobjs, in bpobj_iterate_impl()
496 err = bpobj_open(subbpo, bpo->bpo_os, subobj); in bpobj_iterate_impl()
502 if (subbpo->bpo_havesubobj && in bpobj_iterate_impl()
503 subbpo->bpo_phys->bpo_subobjs != 0) { in bpobj_iterate_impl()
504 dmu_prefetch(subbpo->bpo_os, in bpobj_iterate_impl()
505 subbpo->bpo_phys->bpo_subobjs, 0, 0, 0, in bpobj_iterate_impl()
510 mutex_enter(&subbpo->bpo_lock); in bpobj_iterate_impl()
511 bpi->bpi_unprocessed_subobjs--; in bpobj_iterate_impl()
520 bpobj_t *bpo = bpi->bpi_bpo; in bpobj_iterate_impl()
524 mutex_exit(&bpo->bpo_lock); in bpobj_iterate_impl()
527 if (bpi->bpi_parent != NULL) { in bpobj_iterate_impl()
528 bpobj_close(bpi->bpi_bpo); in bpobj_iterate_impl()
529 kmem_free(bpi->bpi_bpo, sizeof (bpobj_t)); in bpobj_iterate_impl()
579 if (bpo->bpo_havesubobj) in livelist_bpobj_iterate_from_nofree()
580 VERIFY0(bpo->bpo_phys->bpo_subobjs); in livelist_bpobj_iterate_from_nofree()
592 * +--------------+ +--------------+
593 * | bpobj |----------------------->| subobj list |
594 * +----+----+----+----+----+ +-----+-----+--+--+
596 * +----+----+----+----+----+ +-----+-----+-----+
598 * +--------------+ +--------------+
599 * | sub-bpobj |----------------------> | subsubobj |
600 * +----+----+----+----+---------+----+ +-----+-----+--+--------+-----+
602 * +----+----+----+----+---------+----+ +-----+-----+-----------+-----+
604 * Result: sub-bpobj added to parent's subobj list.
605 * +--------------+ +--------------+
606 * | bpobj |----------------------->| subobj list |
607 * +----+----+----+----+----+ +-----+-----+--+--+-----+
609 * +----+----+----+----+----+ +-----+-----+-----+--|--+
611 * /-----------------------------------------------------/
613 * +--------------+ +--------------+
614 * | sub-bpobj |----------------------> | subsubobj |
615 * +----+----+----+----+---------+----+ +-----+-----+--+--------+-----+
617 * +----+----+----+----+---------+----+ +-----+-----+-----------+-----+
623 * +--------------+ +--------------+
624 * | bpobj |----------------------->| subobj list |
625 * +----+----+----+----+----+ +-----+-----+--+--+
627 * +----+----+----+----+----+ +-----+-----+-----+
629 * +--------------+ | +--------------+ |
630 * | sub-bpobj |---------^------------> | subsubobj | ^
631 * +----+----+----+ | +-----+-----+--+ |
632 * | BP | BP |-->-->-->-->-/ | OBJ | OBJ |-->-/
633 * +----+----+ +-----+-----+
636 * +--------------+ +--------------+
637 * | bpobj |----------------------->| subobj list |
638 * +----+----+----+----+----+----+----+ +-----+-----+--+--+-----+-----+
640 * +----+----+----+----+----+----+----+ +-----+-----+-----+-----+-----+
643 * If the subobj has many BP's but few subobj's, we can copy the sub-subobj's
644 * but retain the sub-bpobj:
645 * +--------------+ +--------------+
646 * | bpobj |----------------------->| subobj list |
647 * +----+----+----+----+----+ +-----+-----+--+--+
649 * +----+----+----+----+----+ +-----+-----+-----+
651 * +--------------+ +--------------+ |
652 * | sub-bpobj |----------------------> | subsubobj | ^
653 * +----+----+----+----+---------+----+ +-----+-----+--+ |
654 * | bp | bp | bp | bp | ... | bp | | OBJ | OBJ |-->-/
655 * +----+----+----+----+---------+----+ +-----+-----+
657 * Result: sub-sub-bpobjs and subobj added to parent's subobj list.
658 * +--------------+ +--------------+
659 * | bpobj |-------------------->| subobj list |
660 * +----+----+----+----+----+ +-----+-----+--+--+-----+-----+------+
662 * +----+----+----+----+----+ +-----+-----+-----+-----+-----+--|---+
664 * /--------------------------------------------------------------/
666 * +--------------+
667 * | sub-bpobj |
668 * +----+----+----+----+---------+----+
670 * +----+----+----+----+---------+----+
682 ASSERT(bpo->bpo_havesubobj); in bpobj_enqueue_subobj()
683 ASSERT(bpo->bpo_havecomp); in bpobj_enqueue_subobj()
684 ASSERT(bpo->bpo_object != dmu_objset_pool(bpo->bpo_os)->dp_empty_bpobj); in bpobj_enqueue_subobj()
686 if (subobj == dmu_objset_pool(bpo->bpo_os)->dp_empty_bpobj) { in bpobj_enqueue_subobj()
687 bpobj_decr_empty(bpo->bpo_os, tx); in bpobj_enqueue_subobj()
691 VERIFY3U(0, ==, bpobj_open(&subbpo, bpo->bpo_os, subobj)); in bpobj_enqueue_subobj()
695 bpobj_free(bpo->bpo_os, subobj, tx); in bpobj_enqueue_subobj()
700 mutex_enter(&bpo->bpo_lock); in bpobj_enqueue_subobj()
701 dmu_buf_will_dirty(bpo->bpo_dbuf, tx); in bpobj_enqueue_subobj()
705 if (bpo->bpo_phys->bpo_subobjs != 0) { in bpobj_enqueue_subobj()
706 ASSERT0(dmu_object_info(bpo->bpo_os, bpo->bpo_phys->bpo_subobjs, in bpobj_enqueue_subobj()
716 subsubobjs = subbpo.bpo_phys->bpo_subobjs; in bpobj_enqueue_subobj()
718 VERIFY0(dmu_object_info(bpo->bpo_os, subsubobjs, &doi)); in bpobj_enqueue_subobj()
730 VERIFY3U(0, ==, dmu_object_info(bpo->bpo_os, subobj, &doi)); in bpobj_enqueue_subobj()
737 uint64_t numsubsub = subbpo.bpo_phys->bpo_num_subobjs; in bpobj_enqueue_subobj()
739 VERIFY0(dmu_buf_hold(bpo->bpo_os, subsubobjs, in bpobj_enqueue_subobj()
743 * to write more data than we have in our buffer. in bpobj_enqueue_subobj()
745 VERIFY3U(subdb->db_size, >=, in bpobj_enqueue_subobj()
747 if (bpo->bpo_phys->bpo_subobjs == 0) { in bpobj_enqueue_subobj()
748 bpo->bpo_phys->bpo_subobjs = in bpobj_enqueue_subobj()
749 dmu_object_alloc(bpo->bpo_os, in bpobj_enqueue_subobj()
753 dmu_write(bpo->bpo_os, bpo->bpo_phys->bpo_subobjs, in bpobj_enqueue_subobj()
754 bpo->bpo_phys->bpo_num_subobjs * sizeof (subobj), in bpobj_enqueue_subobj()
755 numsubsub * sizeof (subobj), subdb->db_data, tx); in bpobj_enqueue_subobj()
757 bpo->bpo_phys->bpo_num_subobjs += numsubsub; in bpobj_enqueue_subobj()
760 subbpo.bpo_phys->bpo_subobjs = 0; in bpobj_enqueue_subobj()
761 VERIFY0(dmu_object_free(bpo->bpo_os, subsubobjs, tx)); in bpobj_enqueue_subobj()
765 dmu_buf_t *bps; in bpobj_enqueue_subobj() local
766 uint64_t numbps = subbpo.bpo_phys->bpo_num_blkptrs; in bpobj_enqueue_subobj()
769 VERIFY0(dmu_buf_hold(bpo->bpo_os, subobj, in bpobj_enqueue_subobj()
770 0, FTAG, &bps, 0)); in bpobj_enqueue_subobj()
774 * to write more data than we have in our buffer. in bpobj_enqueue_subobj()
776 VERIFY3U(bps->db_size, >=, numbps * sizeof (blkptr_t)); in bpobj_enqueue_subobj()
777 dmu_write(bpo->bpo_os, bpo->bpo_object, in bpobj_enqueue_subobj()
778 bpo->bpo_phys->bpo_num_blkptrs * sizeof (blkptr_t), in bpobj_enqueue_subobj()
780 bps->db_data, tx); in bpobj_enqueue_subobj()
781 dmu_buf_rele(bps, FTAG); in bpobj_enqueue_subobj()
782 bpo->bpo_phys->bpo_num_blkptrs += numbps; in bpobj_enqueue_subobj()
785 VERIFY0(dmu_object_free(bpo->bpo_os, subobj, tx)); in bpobj_enqueue_subobj()
788 if (bpo->bpo_phys->bpo_subobjs == 0) { in bpobj_enqueue_subobj()
789 bpo->bpo_phys->bpo_subobjs = in bpobj_enqueue_subobj()
790 dmu_object_alloc(bpo->bpo_os, in bpobj_enqueue_subobj()
795 dmu_write(bpo->bpo_os, bpo->bpo_phys->bpo_subobjs, in bpobj_enqueue_subobj()
796 bpo->bpo_phys->bpo_num_subobjs * sizeof (subobj), in bpobj_enqueue_subobj()
798 bpo->bpo_phys->bpo_num_subobjs++; in bpobj_enqueue_subobj()
801 bpo->bpo_phys->bpo_bytes += used; in bpobj_enqueue_subobj()
802 bpo->bpo_phys->bpo_comp += comp; in bpobj_enqueue_subobj()
803 bpo->bpo_phys->bpo_uncomp += uncomp; in bpobj_enqueue_subobj()
804 mutex_exit(&bpo->bpo_lock); in bpobj_enqueue_subobj()
823 if (subobj == dmu_objset_pool(bpo->bpo_os)->dp_empty_bpobj) in bpobj_prefetch_subobj()
826 if (bpobj_open(&subbpo, bpo->bpo_os, subobj) != 0) in bpobj_prefetch_subobj()
832 subsubobjs = subbpo.bpo_phys->bpo_subobjs; in bpobj_prefetch_subobj()
836 if (dmu_object_info(bpo->bpo_os, subsubobjs, &doi) != 0) in bpobj_prefetch_subobj()
842 if (dmu_object_info(bpo->bpo_os, subobj, &doi) != 0) in bpobj_prefetch_subobj()
848 if (bpo->bpo_phys->bpo_subobjs) { in bpobj_prefetch_subobj()
849 dmu_prefetch(bpo->bpo_os, bpo->bpo_phys->bpo_subobjs, 0, in bpobj_prefetch_subobj()
850 bpo->bpo_phys->bpo_num_subobjs * sizeof (subobj), 1, in bpobj_prefetch_subobj()
853 dmu_prefetch(bpo->bpo_os, subsubobjs, 0, 0, 1, in bpobj_prefetch_subobj()
858 dmu_prefetch(bpo->bpo_os, bpo->bpo_object, 0, in bpobj_prefetch_subobj()
859 bpo->bpo_phys->bpo_num_blkptrs * sizeof (blkptr_t), 1, in bpobj_prefetch_subobj()
861 dmu_prefetch(bpo->bpo_os, subobj, 0, 0, 1, in bpobj_prefetch_subobj()
863 } else if (bpo->bpo_phys->bpo_subobjs) { in bpobj_prefetch_subobj()
864 dmu_prefetch(bpo->bpo_os, bpo->bpo_phys->bpo_subobjs, 0, in bpobj_prefetch_subobj()
865 bpo->bpo_phys->bpo_num_subobjs * sizeof (subobj), 1, in bpobj_prefetch_subobj()
881 ASSERT(bpo->bpo_object != dmu_objset_pool(bpo->bpo_os)->dp_empty_bpobj); in bpobj_enqueue()
896 stored_bp.blk_prop = bp->blk_prop; in bpobj_enqueue()
906 mutex_enter(&bpo->bpo_lock); in bpobj_enqueue()
908 offset = bpo->bpo_phys->bpo_num_blkptrs * sizeof (stored_bp); in bpobj_enqueue()
909 blkoff = P2PHASE(bpo->bpo_phys->bpo_num_blkptrs, bpo->bpo_epb); in bpobj_enqueue()
911 if (bpo->bpo_cached_dbuf == NULL || in bpobj_enqueue()
912 offset < bpo->bpo_cached_dbuf->db_offset || in bpobj_enqueue()
913 offset >= bpo->bpo_cached_dbuf->db_offset + in bpobj_enqueue()
914 bpo->bpo_cached_dbuf->db_size) { in bpobj_enqueue()
915 if (bpo->bpo_cached_dbuf) in bpobj_enqueue()
916 dmu_buf_rele(bpo->bpo_cached_dbuf, bpo); in bpobj_enqueue()
917 VERIFY3U(0, ==, dmu_buf_hold(bpo->bpo_os, bpo->bpo_object, in bpobj_enqueue()
918 offset, bpo, &bpo->bpo_cached_dbuf, 0)); in bpobj_enqueue()
919 ASSERT3P(bpo->bpo_cached_dbuf, !=, NULL); in bpobj_enqueue()
922 dmu_buf_will_dirty(bpo->bpo_cached_dbuf, tx); in bpobj_enqueue()
923 bparray = bpo->bpo_cached_dbuf->db_data; in bpobj_enqueue()
926 dmu_buf_will_dirty(bpo->bpo_dbuf, tx); in bpobj_enqueue()
927 bpo->bpo_phys->bpo_num_blkptrs++; in bpobj_enqueue()
928 int sign = bp_freed ? -1 : +1; in bpobj_enqueue()
929 bpo->bpo_phys->bpo_bytes += sign * in bpobj_enqueue()
930 bp_get_dsize_sync(dmu_objset_spa(bpo->bpo_os), bp); in bpobj_enqueue()
931 if (bpo->bpo_havecomp) { in bpobj_enqueue()
932 bpo->bpo_phys->bpo_comp += sign * BP_GET_PSIZE(bp); in bpobj_enqueue()
933 bpo->bpo_phys->bpo_uncomp += sign * BP_GET_UCSIZE(bp); in bpobj_enqueue()
936 ASSERT(bpo->bpo_havefreed); in bpobj_enqueue()
937 bpo->bpo_phys->bpo_num_freed++; in bpobj_enqueue()
939 mutex_exit(&bpo->bpo_lock); in bpobj_enqueue()
957 if (BP_GET_BIRTH(bp) > sra->mintxg && in space_range_cb()
958 BP_GET_BIRTH(bp) <= sra->maxtxg) { in space_range_cb()
959 if (dsl_pool_sync_context(spa_get_dsl(sra->spa))) in space_range_cb()
960 sra->used += bp_get_dsize_sync(sra->spa, bp); in space_range_cb()
962 sra->used += bp_get_dsize(sra->spa, bp); in space_range_cb()
963 sra->comp += BP_GET_PSIZE(bp); in space_range_cb()
964 sra->uncomp += BP_GET_UCSIZE(bp); in space_range_cb()
973 mutex_enter(&bpo->bpo_lock); in bpobj_space()
975 *usedp = bpo->bpo_phys->bpo_bytes; in bpobj_space()
976 if (bpo->bpo_havecomp) { in bpobj_space()
977 *compp = bpo->bpo_phys->bpo_comp; in bpobj_space()
978 *uncompp = bpo->bpo_phys->bpo_uncomp; in bpobj_space()
979 mutex_exit(&bpo->bpo_lock); in bpobj_space()
982 mutex_exit(&bpo->bpo_lock); in bpobj_space()
1003 * get bpo_bytes rather than iterating over the bps. in bpobj_space_range()
1005 if (mintxg < TXG_INITIAL && maxtxg == UINT64_MAX && bpo->bpo_havecomp) in bpobj_space_range()
1008 sra.spa = dmu_objset_spa(bpo->bpo_os); in bpobj_space_range()