Lines Matching refs:sm

89 space_map_iterate(space_map_t *sm, uint64_t end, sm_cb_t callback, void *arg)  in space_map_iterate()  argument
91 uint64_t blksz = sm->sm_blksz; in space_map_iterate()
94 ASSERT3U(end, <=, space_map_length(sm)); in space_map_iterate()
97 dmu_prefetch(sm->sm_os, space_map_object(sm), 0, 0, end, in space_map_iterate()
104 error = dmu_buf_hold(sm->sm_os, space_map_object(sm), in space_map_iterate()
147 uint64_t entry_offset = (raw_offset << sm->sm_shift) + in space_map_iterate()
148 sm->sm_start; in space_map_iterate()
149 uint64_t entry_run = raw_run << sm->sm_shift; in space_map_iterate()
151 VERIFY0(P2PHASE(entry_offset, 1ULL << sm->sm_shift)); in space_map_iterate()
152 VERIFY0(P2PHASE(entry_run, 1ULL << sm->sm_shift)); in space_map_iterate()
153 ASSERT3U(entry_offset, >=, sm->sm_start); in space_map_iterate()
154 ASSERT3U(entry_offset, <, sm->sm_start + sm->sm_size); in space_map_iterate()
155 ASSERT3U(entry_run, <=, sm->sm_size); in space_map_iterate()
157 sm->sm_start + sm->sm_size); in space_map_iterate()
181 space_map_reversed_last_block_entries(space_map_t *sm, uint64_t *buf, in space_map_reversed_last_block_entries() argument
193 sm->sm_phys->smp_length - sizeof (uint64_t); in space_map_reversed_last_block_entries()
194 error = dmu_buf_hold(sm->sm_os, space_map_object(sm), last_word_offset, in space_map_reversed_last_block_entries()
199 ASSERT3U(sm->sm_object, ==, db->db_object); in space_map_reversed_last_block_entries()
200 ASSERT3U(sm->sm_blksz, ==, db->db_size); in space_map_reversed_last_block_entries()
206 (sm->sm_phys->smp_length - db->db_offset) / sizeof (uint64_t); in space_map_reversed_last_block_entries()
254 space_map_incremental_destroy(space_map_t *sm, sm_cb_t callback, void *arg, in space_map_incremental_destroy() argument
257 uint64_t bufsz = MAX(sm->sm_blksz, SPA_MINBLOCKSIZE); in space_map_incremental_destroy()
260 dmu_buf_will_dirty(sm->sm_dbuf, tx); in space_map_incremental_destroy()
292 while (space_map_length(sm) > 0 && error == 0) { in space_map_incremental_destroy()
294 error = space_map_reversed_last_block_entries(sm, buf, bufsz, in space_map_incremental_destroy()
305 sm->sm_phys->smp_length -= sizeof (uint64_t); in space_map_incremental_destroy()
335 (raw_offset << sm->sm_shift) + sm->sm_start; in space_map_incremental_destroy()
336 uint64_t entry_run = raw_run << sm->sm_shift; in space_map_incremental_destroy()
338 VERIFY0(P2PHASE(entry_offset, 1ULL << sm->sm_shift)); in space_map_incremental_destroy()
339 VERIFY0(P2PHASE(entry_run, 1ULL << sm->sm_shift)); in space_map_incremental_destroy()
340 VERIFY3U(entry_offset, >=, sm->sm_start); in space_map_incremental_destroy()
341 VERIFY3U(entry_offset, <, sm->sm_start + sm->sm_size); in space_map_incremental_destroy()
342 VERIFY3U(entry_run, <=, sm->sm_size); in space_map_incremental_destroy()
344 sm->sm_start + sm->sm_size); in space_map_incremental_destroy()
357 sm->sm_phys->smp_alloc -= entry_run; in space_map_incremental_destroy()
359 sm->sm_phys->smp_alloc += entry_run; in space_map_incremental_destroy()
360 sm->sm_phys->smp_length -= words * sizeof (uint64_t); in space_map_incremental_destroy()
364 if (space_map_length(sm) == 0) { in space_map_incremental_destroy()
366 ASSERT0(space_map_allocated(sm)); in space_map_incremental_destroy()
399 space_map_load_length(space_map_t *sm, range_tree_t *rt, maptype_t maptype, in space_map_load_length() argument
407 range_tree_add(rt, sm->sm_start, sm->sm_size); in space_map_load_length()
410 smla.smla_sm = sm; in space_map_load_length()
412 int err = space_map_iterate(sm, length, in space_map_load_length()
426 space_map_load(space_map_t *sm, range_tree_t *rt, maptype_t maptype) in space_map_load() argument
428 return (space_map_load_length(sm, rt, maptype, space_map_length(sm))); in space_map_load()
432 space_map_histogram_clear(space_map_t *sm) in space_map_histogram_clear() argument
434 if (sm->sm_dbuf->db_size != sizeof (space_map_phys_t)) in space_map_histogram_clear()
437 bzero(sm->sm_phys->smp_histogram, sizeof (sm->sm_phys->smp_histogram)); in space_map_histogram_clear()
441 space_map_histogram_verify(space_map_t *sm, range_tree_t *rt) in space_map_histogram_verify() argument
447 for (int i = 0; i < sm->sm_shift; i++) { in space_map_histogram_verify()
455 space_map_histogram_add(space_map_t *sm, range_tree_t *rt, dmu_tx_t *tx) in space_map_histogram_add() argument
460 VERIFY3U(space_map_object(sm), !=, 0); in space_map_histogram_add()
462 if (sm->sm_dbuf->db_size != sizeof (space_map_phys_t)) in space_map_histogram_add()
465 dmu_buf_will_dirty(sm->sm_dbuf, tx); in space_map_histogram_add()
467 ASSERT(space_map_histogram_verify(sm, rt)); in space_map_histogram_add()
476 for (int i = sm->sm_shift; i < RANGE_TREE_HISTOGRAM_SIZE; i++) { in space_map_histogram_add()
487 ASSERT3U(i, >=, idx + sm->sm_shift); in space_map_histogram_add()
488 sm->sm_phys->smp_histogram[idx] += in space_map_histogram_add()
489 rt->rt_histogram[i] << (i - idx - sm->sm_shift); in space_map_histogram_add()
497 ASSERT3U(idx + sm->sm_shift, ==, i); in space_map_histogram_add()
505 space_map_write_intro_debug(space_map_t *sm, maptype_t maptype, dmu_tx_t *tx) in space_map_write_intro_debug() argument
507 dmu_buf_will_dirty(sm->sm_dbuf, tx); in space_map_write_intro_debug()
514 dmu_write(sm->sm_os, space_map_object(sm), sm->sm_phys->smp_length, in space_map_write_intro_debug()
517 sm->sm_phys->smp_length += sizeof (dentry); in space_map_write_intro_debug()
528 space_map_write_seg(space_map_t *sm, uint64_t rstart, uint64_t rend, in space_map_write_seg() argument
545 ASSERT3U(db->db_size, ==, sm->sm_blksz); in space_map_write_seg()
548 uint64_t *block_end = block_base + (sm->sm_blksz / sizeof (uint64_t)); in space_map_write_seg()
550 (sm->sm_phys->smp_length - db->db_offset) / sizeof (uint64_t); in space_map_write_seg()
554 uint64_t size = (rend - rstart) >> sm->sm_shift; in space_map_write_seg()
555 uint64_t start = (rstart - sm->sm_start) >> sm->sm_shift; in space_map_write_seg()
558 ASSERT3U(rstart, >=, sm->sm_start); in space_map_write_seg()
559 ASSERT3U(rstart, <, sm->sm_start + sm->sm_size); in space_map_write_seg()
560 ASSERT3U(rend - rstart, <=, sm->sm_size); in space_map_write_seg()
561 ASSERT3U(rend, <=, sm->sm_start + sm->sm_size); in space_map_write_seg()
573 uint64_t next_word_offset = sm->sm_phys->smp_length; in space_map_write_seg()
574 VERIFY0(dmu_buf_hold(sm->sm_os, in space_map_write_seg()
575 space_map_object(sm), next_word_offset, in space_map_write_seg()
582 ASSERT3U(db->db_size, ==, sm->sm_blksz); in space_map_write_seg()
603 sm->sm_phys->smp_length += sizeof (uint64_t); in space_map_write_seg()
634 sm->sm_phys->smp_length += words * sizeof (uint64_t); in space_map_write_seg()
648 space_map_write_impl(space_map_t *sm, range_tree_t *rt, maptype_t maptype, in space_map_write_impl() argument
654 space_map_write_intro_debug(sm, maptype, tx); in space_map_write_impl()
661 uint64_t initial_objsize = sm->sm_phys->smp_length; in space_map_write_impl()
663 space_map_estimate_optimal_size(sm, rt, SM_NO_VDEVID); in space_map_write_impl()
672 uint64_t next_word_offset = sm->sm_phys->smp_length; in space_map_write_impl()
673 VERIFY0(dmu_buf_hold(sm->sm_os, space_map_object(sm), in space_map_write_impl()
675 ASSERT3U(db->db_size, ==, sm->sm_blksz); in space_map_write_impl()
683 uint64_t offset = (rs_get_start(rs, rt) - sm->sm_start) >> in space_map_write_impl()
684 sm->sm_shift; in space_map_write_impl()
686 sm->sm_shift; in space_map_write_impl()
711 space_map_write_seg(sm, rs_get_start(rs, rt), rs_get_end(rs, in space_map_write_impl()
724 ASSERT3U(estimated_final_objsize, >=, sm->sm_phys->smp_length); in space_map_write_impl()
734 space_map_write(space_map_t *sm, range_tree_t *rt, maptype_t maptype, in space_map_write() argument
737 objset_t *os = sm->sm_os; in space_map_write()
740 VERIFY3U(space_map_object(sm), !=, 0); in space_map_write()
742 dmu_buf_will_dirty(sm->sm_dbuf, tx); in space_map_write()
749 sm->sm_phys->smp_object = sm->sm_object; in space_map_write()
752 VERIFY3U(sm->sm_object, ==, sm->sm_phys->smp_object); in space_map_write()
757 sm->sm_phys->smp_alloc += range_tree_space(rt); in space_map_write()
759 sm->sm_phys->smp_alloc -= range_tree_space(rt); in space_map_write()
764 space_map_write_impl(sm, rt, maptype, vdev_id, tx); in space_map_write()
775 space_map_open_impl(space_map_t *sm) in space_map_open_impl() argument
780 error = dmu_bonus_hold(sm->sm_os, sm->sm_object, sm, &sm->sm_dbuf); in space_map_open_impl()
784 dmu_object_size_from_db(sm->sm_dbuf, &sm->sm_blksz, &blocks); in space_map_open_impl()
785 sm->sm_phys = sm->sm_dbuf->db_data; in space_map_open_impl()
793 space_map_t *sm; in space_map_open() local
800 sm = kmem_zalloc(sizeof (space_map_t), KM_SLEEP); in space_map_open()
802 sm->sm_start = start; in space_map_open()
803 sm->sm_size = size; in space_map_open()
804 sm->sm_shift = shift; in space_map_open()
805 sm->sm_os = os; in space_map_open()
806 sm->sm_object = object; in space_map_open()
808 error = space_map_open_impl(sm); in space_map_open()
810 space_map_close(sm); in space_map_open()
813 *smp = sm; in space_map_open()
819 space_map_close(space_map_t *sm) in space_map_close() argument
821 if (sm == NULL) in space_map_close()
824 if (sm->sm_dbuf != NULL) in space_map_close()
825 dmu_buf_rele(sm->sm_dbuf, sm); in space_map_close()
826 sm->sm_dbuf = NULL; in space_map_close()
827 sm->sm_phys = NULL; in space_map_close()
829 kmem_free(sm, sizeof (*sm)); in space_map_close()
833 space_map_truncate(space_map_t *sm, int blocksize, dmu_tx_t *tx) in space_map_truncate() argument
835 objset_t *os = sm->sm_os; in space_map_truncate()
843 dmu_object_info_from_db(sm->sm_dbuf, &doi); in space_map_truncate()
859 dmu_tx_get_txg(tx), spa_name(spa), sm, sm->sm_object, in space_map_truncate()
862 space_map_free(sm, tx); in space_map_truncate()
863 dmu_buf_rele(sm->sm_dbuf, sm); in space_map_truncate()
865 sm->sm_object = space_map_alloc(sm->sm_os, blocksize, tx); in space_map_truncate()
866 VERIFY0(space_map_open_impl(sm)); in space_map_truncate()
868 VERIFY0(dmu_free_range(os, space_map_object(sm), 0, -1ULL, tx)); in space_map_truncate()
875 bzero(sm->sm_phys->smp_histogram, in space_map_truncate()
876 sizeof (sm->sm_phys->smp_histogram)); in space_map_truncate()
879 dmu_buf_will_dirty(sm->sm_dbuf, tx); in space_map_truncate()
880 sm->sm_phys->smp_length = 0; in space_map_truncate()
881 sm->sm_phys->smp_alloc = 0; in space_map_truncate()
923 space_map_free(space_map_t *sm, dmu_tx_t *tx) in space_map_free() argument
925 if (sm == NULL) in space_map_free()
928 space_map_free_obj(sm->sm_os, space_map_object(sm), tx); in space_map_free()
929 sm->sm_object = 0; in space_map_free()
938 space_map_estimate_optimal_size(space_map_t *sm, range_tree_t *rt, in space_map_estimate_optimal_size() argument
941 spa_t *spa = dmu_objset_spa(sm->sm_os); in space_map_estimate_optimal_size()
942 uint64_t shift = sm->sm_shift; in space_map_estimate_optimal_size()
1008 (vdev_id == SM_NO_VDEVID && sm->sm_size < SM_OFFSET_MAX)) { in space_map_estimate_optimal_size()
1054 size += ((size / sm->sm_blksz) + 1) * sizeof (uint64_t); in space_map_estimate_optimal_size()
1060 space_map_object(space_map_t *sm) in space_map_object() argument
1062 return (sm != NULL ? sm->sm_object : 0); in space_map_object()
1066 space_map_allocated(space_map_t *sm) in space_map_allocated() argument
1068 return (sm != NULL ? sm->sm_phys->smp_alloc : 0); in space_map_allocated()
1072 space_map_length(space_map_t *sm) in space_map_length() argument
1074 return (sm != NULL ? sm->sm_phys->smp_length : 0); in space_map_length()
1078 space_map_nblocks(space_map_t *sm) in space_map_nblocks() argument
1080 if (sm == NULL) in space_map_nblocks()
1082 return (DIV_ROUND_UP(space_map_length(sm), sm->sm_blksz)); in space_map_nblocks()