Lines Matching full:vim
30 vdev_indirect_mapping_verify(vdev_indirect_mapping_t *vim) in vdev_indirect_mapping_verify() argument
32 ASSERT(vim != NULL); in vdev_indirect_mapping_verify()
34 ASSERT(vim->vim_object != 0); in vdev_indirect_mapping_verify()
35 ASSERT(vim->vim_objset != NULL); in vdev_indirect_mapping_verify()
36 ASSERT(vim->vim_phys != NULL); in vdev_indirect_mapping_verify()
37 ASSERT(vim->vim_dbuf != NULL); in vdev_indirect_mapping_verify()
39 EQUIV(vim->vim_phys->vimp_num_entries > 0, in vdev_indirect_mapping_verify()
40 vim->vim_entries != NULL); in vdev_indirect_mapping_verify()
41 if (vim->vim_phys->vimp_num_entries > 0) { in vdev_indirect_mapping_verify()
43 &vim->vim_entries[vim->vim_phys->vimp_num_entries - 1]; in vdev_indirect_mapping_verify()
49 ASSERT3U(vim->vim_phys->vimp_max_offset, >=, offset + size); in vdev_indirect_mapping_verify()
51 if (vim->vim_havecounts) { in vdev_indirect_mapping_verify()
52 ASSERT(vim->vim_phys->vimp_counts_object != 0); in vdev_indirect_mapping_verify()
58 #define vdev_indirect_mapping_verify(vim) ((void) sizeof (vim), B_TRUE) argument
62 vdev_indirect_mapping_num_entries(vdev_indirect_mapping_t *vim) in vdev_indirect_mapping_num_entries() argument
64 ASSERT(vdev_indirect_mapping_verify(vim)); in vdev_indirect_mapping_num_entries()
66 return (vim->vim_phys->vimp_num_entries); in vdev_indirect_mapping_num_entries()
70 vdev_indirect_mapping_max_offset(vdev_indirect_mapping_t *vim) in vdev_indirect_mapping_max_offset() argument
72 ASSERT(vdev_indirect_mapping_verify(vim)); in vdev_indirect_mapping_max_offset()
74 return (vim->vim_phys->vimp_max_offset); in vdev_indirect_mapping_max_offset()
78 vdev_indirect_mapping_object(vdev_indirect_mapping_t *vim) in vdev_indirect_mapping_object() argument
80 ASSERT(vdev_indirect_mapping_verify(vim)); in vdev_indirect_mapping_object()
82 return (vim->vim_object); in vdev_indirect_mapping_object()
86 vdev_indirect_mapping_bytes_mapped(vdev_indirect_mapping_t *vim) in vdev_indirect_mapping_bytes_mapped() argument
88 ASSERT(vdev_indirect_mapping_verify(vim)); in vdev_indirect_mapping_bytes_mapped()
90 return (vim->vim_phys->vimp_bytes_mapped); in vdev_indirect_mapping_bytes_mapped()
103 vdev_indirect_mapping_size(vdev_indirect_mapping_t *vim) in vdev_indirect_mapping_size() argument
105 return (vim->vim_phys->vimp_num_entries * sizeof (*vim->vim_entries)); in vdev_indirect_mapping_size()
176 vdev_indirect_mapping_entry_for_offset_impl(vdev_indirect_mapping_t *vim, in vdev_indirect_mapping_entry_for_offset_impl() argument
179 ASSERT(vdev_indirect_mapping_verify(vim)); in vdev_indirect_mapping_entry_for_offset_impl()
180 ASSERT(vim->vim_phys->vimp_num_entries > 0); in vdev_indirect_mapping_entry_for_offset_impl()
184 uint64_t last = vim->vim_phys->vimp_num_entries - 1; in vdev_indirect_mapping_entry_for_offset_impl()
198 &vim->vim_entries[mid]); in vdev_indirect_mapping_entry_for_offset_impl()
201 entry = &vim->vim_entries[mid]; in vdev_indirect_mapping_entry_for_offset_impl()
234 ASSERT3U(index, <=, vim->vim_phys->vimp_num_entries); in vdev_indirect_mapping_entry_for_offset_impl()
236 if (index == vim->vim_phys->vimp_num_entries) { in vdev_indirect_mapping_entry_for_offset_impl()
247 &vim->vim_entries[index - 1]), >, 0); in vdev_indirect_mapping_entry_for_offset_impl()
261 &vim->vim_entries[index]), <, 0); in vdev_indirect_mapping_entry_for_offset_impl()
263 &vim->vim_entries[index - 1]) > 0); in vdev_indirect_mapping_entry_for_offset_impl()
265 return (&vim->vim_entries[index]); in vdev_indirect_mapping_entry_for_offset_impl()
273 vdev_indirect_mapping_entry_for_offset(vdev_indirect_mapping_t *vim, in vdev_indirect_mapping_entry_for_offset() argument
276 return (vdev_indirect_mapping_entry_for_offset_impl(vim, offset, in vdev_indirect_mapping_entry_for_offset()
281 vdev_indirect_mapping_entry_for_offset_or_next(vdev_indirect_mapping_t *vim, in vdev_indirect_mapping_entry_for_offset_or_next() argument
284 return (vdev_indirect_mapping_entry_for_offset_impl(vim, offset, in vdev_indirect_mapping_entry_for_offset_or_next()
289 vdev_indirect_mapping_close(vdev_indirect_mapping_t *vim) in vdev_indirect_mapping_close() argument
291 ASSERT(vdev_indirect_mapping_verify(vim)); in vdev_indirect_mapping_close()
293 if (vim->vim_phys->vimp_num_entries > 0) { in vdev_indirect_mapping_close()
294 uint64_t map_size = vdev_indirect_mapping_size(vim); in vdev_indirect_mapping_close()
295 vmem_free(vim->vim_entries, map_size); in vdev_indirect_mapping_close()
296 vim->vim_entries = NULL; in vdev_indirect_mapping_close()
299 dmu_buf_rele(vim->vim_dbuf, vim); in vdev_indirect_mapping_close()
301 vim->vim_objset = NULL; in vdev_indirect_mapping_close()
302 vim->vim_object = 0; in vdev_indirect_mapping_close()
303 vim->vim_dbuf = NULL; in vdev_indirect_mapping_close()
304 vim->vim_phys = NULL; in vdev_indirect_mapping_close()
306 kmem_free(vim, sizeof (*vim)); in vdev_indirect_mapping_close()
346 vdev_indirect_mapping_t *vim = kmem_zalloc(sizeof (*vim), KM_SLEEP); in vdev_indirect_mapping_open() local
350 vim->vim_objset = os; in vdev_indirect_mapping_open()
351 vim->vim_object = mapping_object; in vdev_indirect_mapping_open()
353 VERIFY0(dmu_bonus_hold(os, vim->vim_object, vim, in vdev_indirect_mapping_open()
354 &vim->vim_dbuf)); in vdev_indirect_mapping_open()
355 vim->vim_phys = vim->vim_dbuf->db_data; in vdev_indirect_mapping_open()
357 vim->vim_havecounts = in vdev_indirect_mapping_open()
360 if (vim->vim_phys->vimp_num_entries > 0) { in vdev_indirect_mapping_open()
361 uint64_t map_size = vdev_indirect_mapping_size(vim); in vdev_indirect_mapping_open()
362 vim->vim_entries = vmem_alloc(map_size, KM_SLEEP); in vdev_indirect_mapping_open()
363 VERIFY0(dmu_read(os, vim->vim_object, 0, map_size, in vdev_indirect_mapping_open()
364 vim->vim_entries, DMU_READ_PREFETCH)); in vdev_indirect_mapping_open()
367 ASSERT(vdev_indirect_mapping_verify(vim)); in vdev_indirect_mapping_open()
369 return (vim); in vdev_indirect_mapping_open()
375 vdev_indirect_mapping_t *vim = vdev_indirect_mapping_open(os, object); in vdev_indirect_mapping_free() local
376 if (vim->vim_havecounts) { in vdev_indirect_mapping_free()
377 VERIFY0(dmu_object_free(os, vim->vim_phys->vimp_counts_object, in vdev_indirect_mapping_free()
381 vdev_indirect_mapping_close(vim); in vdev_indirect_mapping_free()
393 vdev_indirect_mapping_add_entries(vdev_indirect_mapping_t *vim, in vdev_indirect_mapping_add_entries() argument
403 ASSERT(vdev_indirect_mapping_verify(vim)); in vdev_indirect_mapping_add_entries()
408 old_size = vdev_indirect_mapping_size(vim); in vdev_indirect_mapping_add_entries()
409 old_entries = vim->vim_entries; in vdev_indirect_mapping_add_entries()
410 old_count = vim->vim_phys->vimp_num_entries; in vdev_indirect_mapping_add_entries()
412 dmu_buf_will_dirty(vim->vim_dbuf, tx); in vdev_indirect_mapping_add_entries()
415 if (vim->vim_havecounts) { in vdev_indirect_mapping_add_entries()
417 ASSERT(spa_feature_is_active(vim->vim_objset->os_spa, in vdev_indirect_mapping_add_entries()
443 vim->vim_havecounts); in vdev_indirect_mapping_add_entries()
446 if (vim->vim_havecounts) in vdev_indirect_mapping_add_entries()
449 vim->vim_phys->vimp_bytes_mapped += size; in vdev_indirect_mapping_add_entries()
451 vim->vim_phys->vimp_max_offset); in vdev_indirect_mapping_add_entries()
452 vim->vim_phys->vimp_max_offset = src_offset + size; in vdev_indirect_mapping_add_entries()
458 dmu_write(vim->vim_objset, vim->vim_object, in vdev_indirect_mapping_add_entries()
459 vim->vim_phys->vimp_num_entries * sizeof (*mapbuf), in vdev_indirect_mapping_add_entries()
462 if (vim->vim_havecounts) { in vdev_indirect_mapping_add_entries()
463 dmu_write(vim->vim_objset, in vdev_indirect_mapping_add_entries()
464 vim->vim_phys->vimp_counts_object, in vdev_indirect_mapping_add_entries()
465 vim->vim_phys->vimp_num_entries * in vdev_indirect_mapping_add_entries()
469 vim->vim_phys->vimp_num_entries += i; in vdev_indirect_mapping_add_entries()
472 if (vim->vim_havecounts) in vdev_indirect_mapping_add_entries()
479 uint64_t new_size = vdev_indirect_mapping_size(vim); in vdev_indirect_mapping_add_entries()
483 vim->vim_entries = vmem_alloc(new_size, KM_SLEEP); in vdev_indirect_mapping_add_entries()
485 memcpy(vim->vim_entries, old_entries, old_size); in vdev_indirect_mapping_add_entries()
488 VERIFY0(dmu_read(vim->vim_objset, vim->vim_object, old_size, in vdev_indirect_mapping_add_entries()
489 new_size - old_size, &vim->vim_entries[old_count], in vdev_indirect_mapping_add_entries()
496 (u_longlong_t)vim->vim_object, in vdev_indirect_mapping_add_entries()
497 (u_longlong_t)vim->vim_phys->vimp_max_offset); in vdev_indirect_mapping_add_entries()
506 vdev_indirect_mapping_increment_obsolete_count(vdev_indirect_mapping_t *vim, in vdev_indirect_mapping_increment_obsolete_count() argument
512 mapping = vdev_indirect_mapping_entry_for_offset(vim, offset); in vdev_indirect_mapping_increment_obsolete_count()
517 index = mapping - vim->vim_entries; in vdev_indirect_mapping_increment_obsolete_count()
520 ASSERT3U(index, <, vdev_indirect_mapping_num_entries(vim)); in vdev_indirect_mapping_increment_obsolete_count()
559 vdev_indirect_mapping_load_obsolete_spacemap(vdev_indirect_mapping_t *vim, in vdev_indirect_mapping_load_obsolete_spacemap() argument
564 losma.losma_vim = vim; in vdev_indirect_mapping_load_obsolete_spacemap()
574 vdev_indirect_mapping_load_obsolete_counts(vdev_indirect_mapping_t *vim) in vdev_indirect_mapping_load_obsolete_counts() argument
576 ASSERT(vdev_indirect_mapping_verify(vim)); in vdev_indirect_mapping_load_obsolete_counts()
579 vim->vim_phys->vimp_num_entries * sizeof (uint32_t); in vdev_indirect_mapping_load_obsolete_counts()
581 if (vim->vim_havecounts) { in vdev_indirect_mapping_load_obsolete_counts()
582 VERIFY0(dmu_read(vim->vim_objset, in vdev_indirect_mapping_load_obsolete_counts()
583 vim->vim_phys->vimp_counts_object, in vdev_indirect_mapping_load_obsolete_counts()
593 vdev_indirect_mapping_free_obsolete_counts(vdev_indirect_mapping_t *vim, in vdev_indirect_mapping_free_obsolete_counts() argument
596 ASSERT(vdev_indirect_mapping_verify(vim)); in vdev_indirect_mapping_free_obsolete_counts()
598 vmem_free(counts, vim->vim_phys->vimp_num_entries * sizeof (uint32_t)); in vdev_indirect_mapping_free_obsolete_counts()