Lines Matching +full:write +full:- +full:0 +full:- +full:bps
9 * or https://opensource.org/licenses/CDDL-1.0.
45 ASSERT0(dp->dp_empty_bpobj); in bpobj_alloc_empty()
46 dp->dp_empty_bpobj = in bpobj_alloc_empty()
51 &dp->dp_empty_bpobj, tx) == 0); in bpobj_alloc_empty()
54 ASSERT(dp->dp_empty_bpobj != 0); in bpobj_alloc_empty()
55 return (dp->dp_empty_bpobj); in bpobj_alloc_empty()
69 VERIFY3U(0, ==, zap_remove(dp->dp_meta_objset, in bpobj_decr_empty()
72 VERIFY3U(0, ==, dmu_object_free(os, dp->dp_empty_bpobj, tx)); in bpobj_decr_empty()
73 dp->dp_empty_bpobj = 0; in bpobj_decr_empty()
105 ASSERT(obj != dmu_objset_pool(os)->dp_empty_bpobj); in bpobj_free()
106 VERIFY3U(0, ==, bpobj_open(&bpo, os, obj)); in bpobj_free()
110 if (!bpo.bpo_havesubobj || bpo.bpo_phys->bpo_subobjs == 0) in bpobj_free()
113 VERIFY3U(0, ==, dmu_object_info(os, bpo.bpo_phys->bpo_subobjs, &doi)); in bpobj_free()
116 for (i = bpo.bpo_phys->bpo_num_subobjs - 1; i >= 0; i--) { in bpobj_free()
123 if (dbuf == NULL || dbuf->db_offset > offset) { in bpobj_free()
126 VERIFY3U(0, ==, dmu_buf_hold(os, in bpobj_free()
127 bpo.bpo_phys->bpo_subobjs, offset, FTAG, &dbuf, 0)); in bpobj_free()
130 ASSERT3U(offset, >=, dbuf->db_offset); in bpobj_free()
131 ASSERT3U(offset, <, dbuf->db_offset + dbuf->db_size); in bpobj_free()
133 objarray = dbuf->db_data; in bpobj_free()
140 VERIFY3U(0, ==, dmu_object_free(os, bpo.bpo_phys->bpo_subobjs, tx)); in bpobj_free()
146 VERIFY3U(0, ==, dmu_object_free(os, obj, tx)); in bpobj_free()
159 memset(bpo, 0, sizeof (*bpo)); in bpobj_open()
160 mutex_init(&bpo->bpo_lock, NULL, MUTEX_DEFAULT, NULL); in bpobj_open()
162 ASSERT(bpo->bpo_dbuf == NULL); in bpobj_open()
163 ASSERT(bpo->bpo_phys == NULL); in bpobj_open()
164 ASSERT(object != 0); in bpobj_open()
168 err = dmu_bonus_hold(os, object, bpo, &bpo->bpo_dbuf); in bpobj_open()
172 bpo->bpo_os = os; in bpobj_open()
173 bpo->bpo_object = object; in bpobj_open()
174 bpo->bpo_epb = doi.doi_data_block_size >> SPA_BLKPTRSHIFT; in bpobj_open()
175 bpo->bpo_havecomp = (doi.doi_bonus_size > BPOBJ_SIZE_V0); in bpobj_open()
176 bpo->bpo_havesubobj = (doi.doi_bonus_size > BPOBJ_SIZE_V1); in bpobj_open()
177 bpo->bpo_havefreed = (doi.doi_bonus_size > BPOBJ_SIZE_V2); in bpobj_open()
178 bpo->bpo_phys = bpo->bpo_dbuf->db_data; in bpobj_open()
179 return (0); in bpobj_open()
185 return (bpo->bpo_object != 0); in bpobj_is_open()
192 if (bpo->bpo_object == 0) in bpobj_close()
195 dmu_buf_rele(bpo->bpo_dbuf, bpo); in bpobj_close()
196 if (bpo->bpo_cached_dbuf != NULL) in bpobj_close()
197 dmu_buf_rele(bpo->bpo_cached_dbuf, bpo); in bpobj_close()
198 bpo->bpo_dbuf = NULL; in bpobj_close()
199 bpo->bpo_phys = NULL; in bpobj_close()
200 bpo->bpo_cached_dbuf = NULL; in bpobj_close()
201 bpo->bpo_object = 0; in bpobj_close()
203 mutex_destroy(&bpo->bpo_lock); in bpobj_close()
209 ASSERT(MUTEX_HELD(&bpo->bpo_lock)); in bpobj_is_empty_impl()
210 return (bpo->bpo_phys->bpo_num_blkptrs == 0 && in bpobj_is_empty_impl()
211 (!bpo->bpo_havesubobj || bpo->bpo_phys->bpo_num_subobjs == 0)); in bpobj_is_empty_impl()
217 mutex_enter(&bpo->bpo_lock); in bpobj_is_empty()
219 mutex_exit(&bpo->bpo_lock); in bpobj_is_empty()
240 /* True after having visited this bpo's directly referenced BPs. */
249 bpi->bpi_bpo = bpo; in bpi_alloc()
250 bpi->bpi_parent = parent; in bpi_alloc()
251 bpi->bpi_index = index; in bpi_alloc()
252 if (bpo->bpo_havesubobj && bpo->bpo_phys->bpo_subobjs != 0) { in bpi_alloc()
253 bpi->bpi_unprocessed_subobjs = bpo->bpo_phys->bpo_num_subobjs; in bpi_alloc()
266 for (; bpi != NULL; bpi = bpi->bpi_parent) { in propagate_space_reduction()
267 bpobj_t *p = bpi->bpi_bpo; in propagate_space_reduction()
268 ASSERT(dmu_buf_is_dirty(p->bpo_dbuf, tx)); in propagate_space_reduction()
269 p->bpo_phys->bpo_bytes -= freed; in propagate_space_reduction()
270 ASSERT3S(p->bpo_phys->bpo_bytes, >=, 0); in propagate_space_reduction()
271 if (p->bpo_havecomp) { in propagate_space_reduction()
272 p->bpo_phys->bpo_comp -= comp_freed; in propagate_space_reduction()
273 p->bpo_phys->bpo_uncomp -= uncomp_freed; in propagate_space_reduction()
282 int err = 0; in bpobj_iterate_blkptrs()
283 int64_t freed = 0, comp_freed = 0, uncomp_freed = 0; in bpobj_iterate_blkptrs()
285 bpobj_t *bpo = bpi->bpi_bpo; in bpobj_iterate_blkptrs()
287 int64_t i = bpo->bpo_phys->bpo_num_blkptrs - 1; in bpobj_iterate_blkptrs()
288 uint64_t pe = P2ALIGN_TYPED(i, bpo->bpo_epb, uint64_t) * in bpobj_iterate_blkptrs()
291 uint64_t pb = MAX((pe > dmu_prefetch_max) ? pe - dmu_prefetch_max : 0, in bpobj_iterate_blkptrs()
294 dmu_prefetch(bpo->bpo_os, bpo->bpo_object, 0, pb, pe - pb, in bpobj_iterate_blkptrs()
297 for (; i >= start; i--) { in bpobj_iterate_blkptrs()
299 uint64_t blkoff = P2PHASE(i, bpo->bpo_epb); in bpobj_iterate_blkptrs()
301 if (dbuf == NULL || dbuf->db_offset > offset) { in bpobj_iterate_blkptrs()
304 err = dmu_buf_hold(bpo->bpo_os, bpo->bpo_object, in bpobj_iterate_blkptrs()
309 pb = MAX((dbuf->db_offset > dmu_prefetch_max) ? in bpobj_iterate_blkptrs()
310 dbuf->db_offset - dmu_prefetch_max : 0, ps); in bpobj_iterate_blkptrs()
312 dmu_prefetch(bpo->bpo_os, bpo->bpo_object, 0, in bpobj_iterate_blkptrs()
313 pb, pe - pb, ZIO_PRIORITY_ASYNC_READ); in bpobj_iterate_blkptrs()
317 ASSERT3U(offset, >=, dbuf->db_offset); in bpobj_iterate_blkptrs()
318 ASSERT3U(offset, <, dbuf->db_offset + dbuf->db_size); in bpobj_iterate_blkptrs()
320 blkptr_t *bparray = dbuf->db_data; in bpobj_iterate_blkptrs()
329 int sign = bp_freed ? -1 : +1; in bpobj_iterate_blkptrs()
330 spa_t *spa = dmu_objset_spa(bpo->bpo_os); in bpobj_iterate_blkptrs()
334 ASSERT(dmu_buf_is_dirty(bpo->bpo_dbuf, tx)); in bpobj_iterate_blkptrs()
335 bpo->bpo_phys->bpo_num_blkptrs--; in bpobj_iterate_blkptrs()
336 ASSERT3S(bpo->bpo_phys->bpo_num_blkptrs, >=, 0); in bpobj_iterate_blkptrs()
338 ASSERT(bpo->bpo_havefreed); in bpobj_iterate_blkptrs()
339 bpo->bpo_phys->bpo_num_freed--; in bpobj_iterate_blkptrs()
340 ASSERT3S(bpo->bpo_phys->bpo_num_freed, >=, 0); in bpobj_iterate_blkptrs()
347 VERIFY0(dmu_free_range(bpo->bpo_os, in bpobj_iterate_blkptrs()
348 bpo->bpo_object, in bpobj_iterate_blkptrs()
349 bpo->bpo_phys->bpo_num_blkptrs * sizeof (blkptr_t), in bpobj_iterate_blkptrs()
360 * Given an initial bpo, start by freeing the BPs that are directly referenced
364 * requested also free the now-empty bpo from disk and decrement
374 int err = 0; in bpobj_iterate_impl()
382 mutex_enter(&initial_bpo->bpo_lock); in bpobj_iterate_impl()
385 *bpobj_size = initial_bpo->bpo_phys->bpo_num_blkptrs; in bpobj_iterate_impl()
387 list_insert_head(&stack, bpi_alloc(initial_bpo, NULL, 0)); in bpobj_iterate_impl()
390 bpobj_t *bpo = bpi->bpi_bpo; in bpobj_iterate_impl()
393 ASSERT(MUTEX_HELD(&bpo->bpo_lock)); in bpobj_iterate_impl()
397 dmu_buf_will_dirty(bpo->bpo_dbuf, tx); in bpobj_iterate_impl()
399 if (bpi->bpi_visited == B_FALSE) { in bpobj_iterate_impl()
400 err = bpobj_iterate_blkptrs(bpi, func, arg, 0, tx, in bpobj_iterate_impl()
402 bpi->bpi_visited = B_TRUE; in bpobj_iterate_impl()
403 if (err != 0) in bpobj_iterate_impl()
407 * We've finished with this bpo's directly-referenced BP's and in bpobj_iterate_impl()
412 if (bpi->bpi_unprocessed_subobjs == 0) { in bpobj_iterate_impl()
418 ASSERT0(bpo->bpo_phys->bpo_bytes); in bpobj_iterate_impl()
419 ASSERT0(bpo->bpo_phys->bpo_comp); in bpobj_iterate_impl()
420 ASSERT0(bpo->bpo_phys->bpo_uncomp); in bpobj_iterate_impl()
424 if (bpi->bpi_parent != NULL) { in bpobj_iterate_impl()
426 bpobj_t *p = bpi->bpi_parent->bpi_bpo; in bpobj_iterate_impl()
428 ASSERT0(bpo->bpo_phys->bpo_num_blkptrs); in bpobj_iterate_impl()
429 ASSERT3U(p->bpo_phys->bpo_num_subobjs, in bpobj_iterate_impl()
430 >, 0); in bpobj_iterate_impl()
431 ASSERT3U(bpi->bpi_index, ==, in bpobj_iterate_impl()
432 p->bpo_phys->bpo_num_subobjs - 1); in bpobj_iterate_impl()
433 ASSERT(dmu_buf_is_dirty(bpo->bpo_dbuf, in bpobj_iterate_impl()
436 p->bpo_phys->bpo_num_subobjs--; in bpobj_iterate_impl()
438 VERIFY0(dmu_free_range(p->bpo_os, in bpobj_iterate_impl()
439 p->bpo_phys->bpo_subobjs, in bpobj_iterate_impl()
440 bpi->bpi_index * sizeof (uint64_t), in bpobj_iterate_impl()
444 if (bpo->bpo_havesubobj && in bpobj_iterate_impl()
445 bpo->bpo_phys->bpo_subobjs != 0) { in bpobj_iterate_impl()
446 ASSERT0(bpo->bpo_phys-> in bpobj_iterate_impl()
449 bpo->bpo_os, in bpobj_iterate_impl()
450 bpo->bpo_phys->bpo_subobjs, in bpobj_iterate_impl()
454 bpo->bpo_phys->bpo_subobjs = 0; in bpobj_iterate_impl()
456 err = dmu_object_free(p->bpo_os, in bpobj_iterate_impl()
457 bpo->bpo_object, tx); in bpobj_iterate_impl()
462 mutex_exit(&bpo->bpo_lock); in bpobj_iterate_impl()
466 mutex_exit(&bpo->bpo_lock); in bpobj_iterate_impl()
479 ASSERT(bpo->bpo_havecomp); in bpobj_iterate_impl()
483 int64_t i = bpi->bpi_unprocessed_subobjs - 1; in bpobj_iterate_impl()
487 err = dmu_read(bpo->bpo_os, bpo->bpo_phys->bpo_subobjs, in bpobj_iterate_impl()
495 err = bpobj_open(subbpo, bpo->bpo_os, subobj); in bpobj_iterate_impl()
501 if (subbpo->bpo_havesubobj && in bpobj_iterate_impl()
502 subbpo->bpo_phys->bpo_subobjs != 0) { in bpobj_iterate_impl()
503 dmu_prefetch(subbpo->bpo_os, in bpobj_iterate_impl()
504 subbpo->bpo_phys->bpo_subobjs, 0, 0, 0, in bpobj_iterate_impl()
509 mutex_enter(&subbpo->bpo_lock); in bpobj_iterate_impl()
510 bpi->bpi_unprocessed_subobjs--; in bpobj_iterate_impl()
519 bpobj_t *bpo = bpi->bpi_bpo; in bpobj_iterate_impl()
520 ASSERT(err != 0); in bpobj_iterate_impl()
523 mutex_exit(&bpo->bpo_lock); in bpobj_iterate_impl()
526 if (bpi->bpi_parent != NULL) { in bpobj_iterate_impl()
527 bpobj_close(bpi->bpi_bpo); in bpobj_iterate_impl()
528 kmem_free(bpi->bpi_bpo, sizeof (bpobj_t)); in bpobj_iterate_impl()
578 if (bpo->bpo_havesubobj) in livelist_bpobj_iterate_from_nofree()
579 VERIFY0(bpo->bpo_phys->bpo_subobjs); in livelist_bpobj_iterate_from_nofree()
580 bpobj_info_t *bpi = bpi_alloc(bpo, NULL, 0); in livelist_bpobj_iterate_from_nofree()
591 * +--------------+ +--------------+
592 * | bpobj |----------------------->| subobj list |
593 * +----+----+----+----+----+ +-----+-----+--+--+
595 * +----+----+----+----+----+ +-----+-----+-----+
597 * +--------------+ +--------------+
598 * | sub-bpobj |----------------------> | subsubobj |
599 * +----+----+----+----+---------+----+ +-----+-----+--+--------+-----+
601 * +----+----+----+----+---------+----+ +-----+-----+-----------+-----+
603 * Result: sub-bpobj added to parent's subobj list.
604 * +--------------+ +--------------+
605 * | bpobj |----------------------->| subobj list |
606 * +----+----+----+----+----+ +-----+-----+--+--+-----+
608 * +----+----+----+----+----+ +-----+-----+-----+--|--+
610 * /-----------------------------------------------------/
612 * +--------------+ +--------------+
613 * | sub-bpobj |----------------------> | subsubobj |
614 * +----+----+----+----+---------+----+ +-----+-----+--+--------+-----+
616 * +----+----+----+----+---------+----+ +-----+-----+-----------+-----+
622 * +--------------+ +--------------+
623 * | bpobj |----------------------->| subobj list |
624 * +----+----+----+----+----+ +-----+-----+--+--+
626 * +----+----+----+----+----+ +-----+-----+-----+
628 * +--------------+ | +--------------+ |
629 * | sub-bpobj |---------^------------> | subsubobj | ^
630 * +----+----+----+ | +-----+-----+--+ |
631 * | BP | BP |-->-->-->-->-/ | OBJ | OBJ |-->-/
632 * +----+----+ +-----+-----+
635 * +--------------+ +--------------+
636 * | bpobj |----------------------->| subobj list |
637 * +----+----+----+----+----+----+----+ +-----+-----+--+--+-----+-----+
639 * +----+----+----+----+----+----+----+ +-----+-----+-----+-----+-----+
642 * If the subobj has many BP's but few subobj's, we can copy the sub-subobj's
643 * but retain the sub-bpobj:
644 * +--------------+ +--------------+
645 * | bpobj |----------------------->| subobj list |
646 * +----+----+----+----+----+ +-----+-----+--+--+
648 * +----+----+----+----+----+ +-----+-----+-----+
650 * +--------------+ +--------------+ |
651 * | sub-bpobj |----------------------> | subsubobj | ^
652 * +----+----+----+----+---------+----+ +-----+-----+--+ |
653 * | bp | bp | bp | bp | ... | bp | | OBJ | OBJ |-->-/
654 * +----+----+----+----+---------+----+ +-----+-----+
656 * Result: sub-sub-bpobjs and subobj added to parent's subobj list.
657 * +--------------+ +--------------+
658 * | bpobj |-------------------->| subobj list |
659 * +----+----+----+----+----+ +-----+-----+--+--+-----+-----+------+
661 * +----+----+----+----+----+ +-----+-----+-----+-----+-----+--|---+
663 * /--------------------------------------------------------------/
665 * +--------------+
666 * | sub-bpobj |
667 * +----+----+----+----+---------+----+
669 * +----+----+----+----+---------+----+
680 ASSERT(subobj != 0); in bpobj_enqueue_subobj()
681 ASSERT(bpo->bpo_havesubobj); in bpobj_enqueue_subobj()
682 ASSERT(bpo->bpo_havecomp); in bpobj_enqueue_subobj()
683 ASSERT(bpo->bpo_object != dmu_objset_pool(bpo->bpo_os)->dp_empty_bpobj); in bpobj_enqueue_subobj()
685 if (subobj == dmu_objset_pool(bpo->bpo_os)->dp_empty_bpobj) { in bpobj_enqueue_subobj()
686 bpobj_decr_empty(bpo->bpo_os, tx); in bpobj_enqueue_subobj()
690 VERIFY3U(0, ==, bpobj_open(&subbpo, bpo->bpo_os, subobj)); in bpobj_enqueue_subobj()
694 bpobj_free(bpo->bpo_os, subobj, tx); in bpobj_enqueue_subobj()
697 VERIFY3U(0, ==, bpobj_space(&subbpo, &used, &comp, &uncomp)); in bpobj_enqueue_subobj()
699 mutex_enter(&bpo->bpo_lock); in bpobj_enqueue_subobj()
700 dmu_buf_will_dirty(bpo->bpo_dbuf, tx); in bpobj_enqueue_subobj()
704 if (bpo->bpo_phys->bpo_subobjs != 0) { in bpobj_enqueue_subobj()
705 ASSERT0(dmu_object_info(bpo->bpo_os, bpo->bpo_phys->bpo_subobjs, in bpobj_enqueue_subobj()
715 subsubobjs = subbpo.bpo_phys->bpo_subobjs; in bpobj_enqueue_subobj()
716 if (subsubobjs != 0) { in bpobj_enqueue_subobj()
717 VERIFY0(dmu_object_info(bpo->bpo_os, subsubobjs, &doi)); in bpobj_enqueue_subobj()
729 VERIFY3U(0, ==, dmu_object_info(bpo->bpo_os, subobj, &doi)); in bpobj_enqueue_subobj()
734 if (copy_subsub && subsubobjs != 0) { in bpobj_enqueue_subobj()
736 uint64_t numsubsub = subbpo.bpo_phys->bpo_num_subobjs; in bpobj_enqueue_subobj()
738 VERIFY0(dmu_buf_hold(bpo->bpo_os, subsubobjs, in bpobj_enqueue_subobj()
739 0, FTAG, &subdb, 0)); in bpobj_enqueue_subobj()
742 * to write more data than we have in our buffer. in bpobj_enqueue_subobj()
744 VERIFY3U(subdb->db_size, >=, in bpobj_enqueue_subobj()
746 if (bpo->bpo_phys->bpo_subobjs == 0) { in bpobj_enqueue_subobj()
747 bpo->bpo_phys->bpo_subobjs = in bpobj_enqueue_subobj()
748 dmu_object_alloc(bpo->bpo_os, in bpobj_enqueue_subobj()
750 DMU_OT_NONE, 0, tx); in bpobj_enqueue_subobj()
752 dmu_write(bpo->bpo_os, bpo->bpo_phys->bpo_subobjs, in bpobj_enqueue_subobj()
753 bpo->bpo_phys->bpo_num_subobjs * sizeof (subobj), in bpobj_enqueue_subobj()
754 numsubsub * sizeof (subobj), subdb->db_data, tx); in bpobj_enqueue_subobj()
756 bpo->bpo_phys->bpo_num_subobjs += numsubsub; in bpobj_enqueue_subobj()
759 subbpo.bpo_phys->bpo_subobjs = 0; in bpobj_enqueue_subobj()
760 VERIFY0(dmu_object_free(bpo->bpo_os, subsubobjs, tx)); in bpobj_enqueue_subobj()
764 dmu_buf_t *bps; in bpobj_enqueue_subobj() local
765 uint64_t numbps = subbpo.bpo_phys->bpo_num_blkptrs; in bpobj_enqueue_subobj()
768 VERIFY0(dmu_buf_hold(bpo->bpo_os, subobj, in bpobj_enqueue_subobj()
769 0, FTAG, &bps, 0)); in bpobj_enqueue_subobj()
773 * to write more data than we have in our buffer. in bpobj_enqueue_subobj()
775 VERIFY3U(bps->db_size, >=, numbps * sizeof (blkptr_t)); in bpobj_enqueue_subobj()
776 dmu_write(bpo->bpo_os, bpo->bpo_object, in bpobj_enqueue_subobj()
777 bpo->bpo_phys->bpo_num_blkptrs * sizeof (blkptr_t), in bpobj_enqueue_subobj()
779 bps->db_data, tx); in bpobj_enqueue_subobj()
780 dmu_buf_rele(bps, FTAG); in bpobj_enqueue_subobj()
781 bpo->bpo_phys->bpo_num_blkptrs += numbps; in bpobj_enqueue_subobj()
784 VERIFY0(dmu_object_free(bpo->bpo_os, subobj, tx)); in bpobj_enqueue_subobj()
787 if (bpo->bpo_phys->bpo_subobjs == 0) { in bpobj_enqueue_subobj()
788 bpo->bpo_phys->bpo_subobjs = in bpobj_enqueue_subobj()
789 dmu_object_alloc(bpo->bpo_os, in bpobj_enqueue_subobj()
791 DMU_OT_NONE, 0, tx); in bpobj_enqueue_subobj()
794 dmu_write(bpo->bpo_os, bpo->bpo_phys->bpo_subobjs, in bpobj_enqueue_subobj()
795 bpo->bpo_phys->bpo_num_subobjs * sizeof (subobj), in bpobj_enqueue_subobj()
797 bpo->bpo_phys->bpo_num_subobjs++; in bpobj_enqueue_subobj()
800 bpo->bpo_phys->bpo_bytes += used; in bpobj_enqueue_subobj()
801 bpo->bpo_phys->bpo_comp += comp; in bpobj_enqueue_subobj()
802 bpo->bpo_phys->bpo_uncomp += uncomp; in bpobj_enqueue_subobj()
803 mutex_exit(&bpo->bpo_lock); in bpobj_enqueue_subobj()
820 ASSERT(subobj != 0); in bpobj_prefetch_subobj()
822 if (subobj == dmu_objset_pool(bpo->bpo_os)->dp_empty_bpobj) in bpobj_prefetch_subobj()
825 if (bpobj_open(&subbpo, bpo->bpo_os, subobj) != 0) in bpobj_prefetch_subobj()
831 subsubobjs = subbpo.bpo_phys->bpo_subobjs; in bpobj_prefetch_subobj()
834 if (subsubobjs != 0) { in bpobj_prefetch_subobj()
835 if (dmu_object_info(bpo->bpo_os, subsubobjs, &doi) != 0) in bpobj_prefetch_subobj()
841 if (dmu_object_info(bpo->bpo_os, subobj, &doi) != 0) in bpobj_prefetch_subobj()
846 if (copy_subsub && subsubobjs != 0) { in bpobj_prefetch_subobj()
847 if (bpo->bpo_phys->bpo_subobjs) { in bpobj_prefetch_subobj()
848 dmu_prefetch(bpo->bpo_os, bpo->bpo_phys->bpo_subobjs, 0, in bpobj_prefetch_subobj()
849 bpo->bpo_phys->bpo_num_subobjs * sizeof (subobj), 1, in bpobj_prefetch_subobj()
852 dmu_prefetch(bpo->bpo_os, subsubobjs, 0, 0, 1, in bpobj_prefetch_subobj()
857 dmu_prefetch(bpo->bpo_os, bpo->bpo_object, 0, in bpobj_prefetch_subobj()
858 bpo->bpo_phys->bpo_num_blkptrs * sizeof (blkptr_t), 1, in bpobj_prefetch_subobj()
860 dmu_prefetch(bpo->bpo_os, subobj, 0, 0, 1, in bpobj_prefetch_subobj()
862 } else if (bpo->bpo_phys->bpo_subobjs) { in bpobj_prefetch_subobj()
863 dmu_prefetch(bpo->bpo_os, bpo->bpo_phys->bpo_subobjs, 0, in bpobj_prefetch_subobj()
864 bpo->bpo_phys->bpo_num_subobjs * sizeof (subobj), 1, in bpobj_prefetch_subobj()
880 ASSERT(bpo->bpo_object != dmu_objset_pool(bpo->bpo_os)->dp_empty_bpobj); in bpobj_enqueue()
894 memset(&stored_bp, 0, sizeof (stored_bp)); in bpobj_enqueue()
895 stored_bp.blk_prop = bp->blk_prop; in bpobj_enqueue()
899 memset(&stored_bp.blk_cksum, 0, sizeof (stored_bp.blk_cksum)); in bpobj_enqueue()
902 stored_bp.blk_fill = 0; in bpobj_enqueue()
905 mutex_enter(&bpo->bpo_lock); in bpobj_enqueue()
907 offset = bpo->bpo_phys->bpo_num_blkptrs * sizeof (stored_bp); in bpobj_enqueue()
908 blkoff = P2PHASE(bpo->bpo_phys->bpo_num_blkptrs, bpo->bpo_epb); in bpobj_enqueue()
910 if (bpo->bpo_cached_dbuf == NULL || in bpobj_enqueue()
911 offset < bpo->bpo_cached_dbuf->db_offset || in bpobj_enqueue()
912 offset >= bpo->bpo_cached_dbuf->db_offset + in bpobj_enqueue()
913 bpo->bpo_cached_dbuf->db_size) { in bpobj_enqueue()
914 if (bpo->bpo_cached_dbuf) in bpobj_enqueue()
915 dmu_buf_rele(bpo->bpo_cached_dbuf, bpo); in bpobj_enqueue()
916 VERIFY3U(0, ==, dmu_buf_hold(bpo->bpo_os, bpo->bpo_object, in bpobj_enqueue()
917 offset, bpo, &bpo->bpo_cached_dbuf, 0)); in bpobj_enqueue()
918 ASSERT3P(bpo->bpo_cached_dbuf, !=, NULL); in bpobj_enqueue()
921 dmu_buf_will_dirty(bpo->bpo_cached_dbuf, tx); in bpobj_enqueue()
922 bparray = bpo->bpo_cached_dbuf->db_data; in bpobj_enqueue()
925 dmu_buf_will_dirty(bpo->bpo_dbuf, tx); in bpobj_enqueue()
926 bpo->bpo_phys->bpo_num_blkptrs++; in bpobj_enqueue()
927 int sign = bp_freed ? -1 : +1; in bpobj_enqueue()
928 bpo->bpo_phys->bpo_bytes += sign * in bpobj_enqueue()
929 bp_get_dsize_sync(dmu_objset_spa(bpo->bpo_os), bp); in bpobj_enqueue()
930 if (bpo->bpo_havecomp) { in bpobj_enqueue()
931 bpo->bpo_phys->bpo_comp += sign * BP_GET_PSIZE(bp); in bpobj_enqueue()
932 bpo->bpo_phys->bpo_uncomp += sign * BP_GET_UCSIZE(bp); in bpobj_enqueue()
935 ASSERT(bpo->bpo_havefreed); in bpobj_enqueue()
936 bpo->bpo_phys->bpo_num_freed++; in bpobj_enqueue()
938 mutex_exit(&bpo->bpo_lock); in bpobj_enqueue()
956 if (BP_GET_LOGICAL_BIRTH(bp) > sra->mintxg && in space_range_cb()
957 BP_GET_LOGICAL_BIRTH(bp) <= sra->maxtxg) { in space_range_cb()
958 if (dsl_pool_sync_context(spa_get_dsl(sra->spa))) in space_range_cb()
959 sra->used += bp_get_dsize_sync(sra->spa, bp); in space_range_cb()
961 sra->used += bp_get_dsize(sra->spa, bp); in space_range_cb()
962 sra->comp += BP_GET_PSIZE(bp); in space_range_cb()
963 sra->uncomp += BP_GET_UCSIZE(bp); in space_range_cb()
965 return (0); in space_range_cb()
972 mutex_enter(&bpo->bpo_lock); in bpobj_space()
974 *usedp = bpo->bpo_phys->bpo_bytes; in bpobj_space()
975 if (bpo->bpo_havecomp) { in bpobj_space()
976 *compp = bpo->bpo_phys->bpo_comp; in bpobj_space()
977 *uncompp = bpo->bpo_phys->bpo_uncomp; in bpobj_space()
978 mutex_exit(&bpo->bpo_lock); in bpobj_space()
979 return (0); in bpobj_space()
981 mutex_exit(&bpo->bpo_lock); in bpobj_space()
982 return (bpobj_space_range(bpo, 0, UINT64_MAX, in bpobj_space()
995 struct space_range_arg sra = { 0 }; in bpobj_space_range()
1002 * get bpo_bytes rather than iterating over the bps. in bpobj_space_range()
1004 if (mintxg < TXG_INITIAL && maxtxg == UINT64_MAX && bpo->bpo_havecomp) in bpobj_space_range()
1007 sra.spa = dmu_objset_spa(bpo->bpo_os); in bpobj_space_range()
1030 return (0); in bplist_append_cb()