Lines Matching refs:vim

31 vdev_indirect_mapping_verify(vdev_indirect_mapping_t *vim)  in vdev_indirect_mapping_verify()  argument
33 ASSERT(vim != NULL); in vdev_indirect_mapping_verify()
35 ASSERT(vim->vim_object != 0); in vdev_indirect_mapping_verify()
36 ASSERT(vim->vim_objset != NULL); in vdev_indirect_mapping_verify()
37 ASSERT(vim->vim_phys != NULL); in vdev_indirect_mapping_verify()
38 ASSERT(vim->vim_dbuf != NULL); in vdev_indirect_mapping_verify()
40 EQUIV(vim->vim_phys->vimp_num_entries > 0, in vdev_indirect_mapping_verify()
41 vim->vim_entries != NULL); in vdev_indirect_mapping_verify()
42 if (vim->vim_phys->vimp_num_entries > 0) { in vdev_indirect_mapping_verify()
44 &vim->vim_entries[vim->vim_phys->vimp_num_entries - 1]; in vdev_indirect_mapping_verify()
50 ASSERT3U(vim->vim_phys->vimp_max_offset, >=, offset + size); in vdev_indirect_mapping_verify()
52 if (vim->vim_havecounts) { in vdev_indirect_mapping_verify()
53 ASSERT(vim->vim_phys->vimp_counts_object != 0); in vdev_indirect_mapping_verify()
59 #define vdev_indirect_mapping_verify(vim) ((void) sizeof (vim), B_TRUE) argument
63 vdev_indirect_mapping_num_entries(vdev_indirect_mapping_t *vim) in vdev_indirect_mapping_num_entries() argument
65 ASSERT(vdev_indirect_mapping_verify(vim)); in vdev_indirect_mapping_num_entries()
67 return (vim->vim_phys->vimp_num_entries); in vdev_indirect_mapping_num_entries()
71 vdev_indirect_mapping_max_offset(vdev_indirect_mapping_t *vim) in vdev_indirect_mapping_max_offset() argument
73 ASSERT(vdev_indirect_mapping_verify(vim)); in vdev_indirect_mapping_max_offset()
75 return (vim->vim_phys->vimp_max_offset); in vdev_indirect_mapping_max_offset()
79 vdev_indirect_mapping_object(vdev_indirect_mapping_t *vim) in vdev_indirect_mapping_object() argument
81 ASSERT(vdev_indirect_mapping_verify(vim)); in vdev_indirect_mapping_object()
83 return (vim->vim_object); in vdev_indirect_mapping_object()
87 vdev_indirect_mapping_bytes_mapped(vdev_indirect_mapping_t *vim) in vdev_indirect_mapping_bytes_mapped() argument
89 ASSERT(vdev_indirect_mapping_verify(vim)); in vdev_indirect_mapping_bytes_mapped()
91 return (vim->vim_phys->vimp_bytes_mapped); in vdev_indirect_mapping_bytes_mapped()
104 vdev_indirect_mapping_size(vdev_indirect_mapping_t *vim) in vdev_indirect_mapping_size() argument
106 return (vim->vim_phys->vimp_num_entries * sizeof (*vim->vim_entries)); in vdev_indirect_mapping_size()
177 vdev_indirect_mapping_entry_for_offset_impl(vdev_indirect_mapping_t *vim, in vdev_indirect_mapping_entry_for_offset_impl() argument
180 ASSERT(vdev_indirect_mapping_verify(vim)); in vdev_indirect_mapping_entry_for_offset_impl()
181 ASSERT(vim->vim_phys->vimp_num_entries > 0); in vdev_indirect_mapping_entry_for_offset_impl()
185 uint64_t last = vim->vim_phys->vimp_num_entries - 1; in vdev_indirect_mapping_entry_for_offset_impl()
199 &vim->vim_entries[mid]); in vdev_indirect_mapping_entry_for_offset_impl()
202 entry = &vim->vim_entries[mid]; in vdev_indirect_mapping_entry_for_offset_impl()
235 ASSERT3U(index, <=, vim->vim_phys->vimp_num_entries); in vdev_indirect_mapping_entry_for_offset_impl()
237 if (index == vim->vim_phys->vimp_num_entries) { in vdev_indirect_mapping_entry_for_offset_impl()
248 &vim->vim_entries[index - 1]), >, 0); in vdev_indirect_mapping_entry_for_offset_impl()
262 &vim->vim_entries[index]), <, 0); in vdev_indirect_mapping_entry_for_offset_impl()
264 &vim->vim_entries[index - 1]) > 0); in vdev_indirect_mapping_entry_for_offset_impl()
266 return (&vim->vim_entries[index]); in vdev_indirect_mapping_entry_for_offset_impl()
274 vdev_indirect_mapping_entry_for_offset(vdev_indirect_mapping_t *vim, in vdev_indirect_mapping_entry_for_offset() argument
277 return (vdev_indirect_mapping_entry_for_offset_impl(vim, offset, in vdev_indirect_mapping_entry_for_offset()
282 vdev_indirect_mapping_entry_for_offset_or_next(vdev_indirect_mapping_t *vim, in vdev_indirect_mapping_entry_for_offset_or_next() argument
285 return (vdev_indirect_mapping_entry_for_offset_impl(vim, offset, in vdev_indirect_mapping_entry_for_offset_or_next()
290 vdev_indirect_mapping_close(vdev_indirect_mapping_t *vim) in vdev_indirect_mapping_close() argument
292 ASSERT(vdev_indirect_mapping_verify(vim)); in vdev_indirect_mapping_close()
294 if (vim->vim_phys->vimp_num_entries > 0) { in vdev_indirect_mapping_close()
295 uint64_t map_size = vdev_indirect_mapping_size(vim); in vdev_indirect_mapping_close()
296 vmem_free(vim->vim_entries, map_size); in vdev_indirect_mapping_close()
297 vim->vim_entries = NULL; in vdev_indirect_mapping_close()
300 dmu_buf_rele(vim->vim_dbuf, vim); in vdev_indirect_mapping_close()
302 vim->vim_objset = NULL; in vdev_indirect_mapping_close()
303 vim->vim_object = 0; in vdev_indirect_mapping_close()
304 vim->vim_dbuf = NULL; in vdev_indirect_mapping_close()
305 vim->vim_phys = NULL; in vdev_indirect_mapping_close()
307 kmem_free(vim, sizeof (*vim)); in vdev_indirect_mapping_close()
347 vdev_indirect_mapping_t *vim = kmem_zalloc(sizeof (*vim), KM_SLEEP); in vdev_indirect_mapping_open() local
351 vim->vim_objset = os; in vdev_indirect_mapping_open()
352 vim->vim_object = mapping_object; in vdev_indirect_mapping_open()
354 VERIFY0(dmu_bonus_hold(os, vim->vim_object, vim, in vdev_indirect_mapping_open()
355 &vim->vim_dbuf)); in vdev_indirect_mapping_open()
356 vim->vim_phys = vim->vim_dbuf->db_data; in vdev_indirect_mapping_open()
358 vim->vim_havecounts = in vdev_indirect_mapping_open()
361 if (vim->vim_phys->vimp_num_entries > 0) { in vdev_indirect_mapping_open()
362 uint64_t map_size = vdev_indirect_mapping_size(vim); in vdev_indirect_mapping_open()
363 vim->vim_entries = vmem_alloc(map_size, KM_SLEEP); in vdev_indirect_mapping_open()
364 VERIFY0(dmu_read(os, vim->vim_object, 0, map_size, in vdev_indirect_mapping_open()
365 vim->vim_entries, DMU_READ_PREFETCH)); in vdev_indirect_mapping_open()
368 ASSERT(vdev_indirect_mapping_verify(vim)); in vdev_indirect_mapping_open()
370 return (vim); in vdev_indirect_mapping_open()
376 vdev_indirect_mapping_t *vim = vdev_indirect_mapping_open(os, object); in vdev_indirect_mapping_free() local
377 if (vim->vim_havecounts) { in vdev_indirect_mapping_free()
378 VERIFY0(dmu_object_free(os, vim->vim_phys->vimp_counts_object, in vdev_indirect_mapping_free()
382 vdev_indirect_mapping_close(vim); in vdev_indirect_mapping_free()
394 vdev_indirect_mapping_add_entries(vdev_indirect_mapping_t *vim, in vdev_indirect_mapping_add_entries() argument
404 ASSERT(vdev_indirect_mapping_verify(vim)); in vdev_indirect_mapping_add_entries()
409 old_size = vdev_indirect_mapping_size(vim); in vdev_indirect_mapping_add_entries()
410 old_entries = vim->vim_entries; in vdev_indirect_mapping_add_entries()
411 old_count = vim->vim_phys->vimp_num_entries; in vdev_indirect_mapping_add_entries()
413 dmu_buf_will_dirty(vim->vim_dbuf, tx); in vdev_indirect_mapping_add_entries()
416 if (vim->vim_havecounts) { in vdev_indirect_mapping_add_entries()
418 ASSERT(spa_feature_is_active(vim->vim_objset->os_spa, in vdev_indirect_mapping_add_entries()
444 vim->vim_havecounts); in vdev_indirect_mapping_add_entries()
447 if (vim->vim_havecounts) in vdev_indirect_mapping_add_entries()
450 vim->vim_phys->vimp_bytes_mapped += size; in vdev_indirect_mapping_add_entries()
452 vim->vim_phys->vimp_max_offset); in vdev_indirect_mapping_add_entries()
453 vim->vim_phys->vimp_max_offset = src_offset + size; in vdev_indirect_mapping_add_entries()
459 dmu_write(vim->vim_objset, vim->vim_object, in vdev_indirect_mapping_add_entries()
460 vim->vim_phys->vimp_num_entries * sizeof (*mapbuf), in vdev_indirect_mapping_add_entries()
463 if (vim->vim_havecounts) { in vdev_indirect_mapping_add_entries()
464 dmu_write(vim->vim_objset, in vdev_indirect_mapping_add_entries()
465 vim->vim_phys->vimp_counts_object, in vdev_indirect_mapping_add_entries()
466 vim->vim_phys->vimp_num_entries * in vdev_indirect_mapping_add_entries()
471 vim->vim_phys->vimp_num_entries += i; in vdev_indirect_mapping_add_entries()
474 if (vim->vim_havecounts) in vdev_indirect_mapping_add_entries()
481 uint64_t new_size = vdev_indirect_mapping_size(vim); in vdev_indirect_mapping_add_entries()
485 vim->vim_entries = vmem_alloc(new_size, KM_SLEEP); in vdev_indirect_mapping_add_entries()
487 memcpy(vim->vim_entries, old_entries, old_size); in vdev_indirect_mapping_add_entries()
490 VERIFY0(dmu_read(vim->vim_objset, vim->vim_object, old_size, in vdev_indirect_mapping_add_entries()
491 new_size - old_size, &vim->vim_entries[old_count], in vdev_indirect_mapping_add_entries()
498 (u_longlong_t)vim->vim_object, in vdev_indirect_mapping_add_entries()
499 (u_longlong_t)vim->vim_phys->vimp_max_offset); in vdev_indirect_mapping_add_entries()
508 vdev_indirect_mapping_increment_obsolete_count(vdev_indirect_mapping_t *vim, in vdev_indirect_mapping_increment_obsolete_count() argument
514 mapping = vdev_indirect_mapping_entry_for_offset(vim, offset); in vdev_indirect_mapping_increment_obsolete_count()
519 index = mapping - vim->vim_entries; in vdev_indirect_mapping_increment_obsolete_count()
522 ASSERT3U(index, <, vdev_indirect_mapping_num_entries(vim)); in vdev_indirect_mapping_increment_obsolete_count()
561 vdev_indirect_mapping_load_obsolete_spacemap(vdev_indirect_mapping_t *vim, in vdev_indirect_mapping_load_obsolete_spacemap() argument
566 losma.losma_vim = vim; in vdev_indirect_mapping_load_obsolete_spacemap()
576 vdev_indirect_mapping_load_obsolete_counts(vdev_indirect_mapping_t *vim) in vdev_indirect_mapping_load_obsolete_counts() argument
578 ASSERT(vdev_indirect_mapping_verify(vim)); in vdev_indirect_mapping_load_obsolete_counts()
581 vim->vim_phys->vimp_num_entries * sizeof (uint32_t); in vdev_indirect_mapping_load_obsolete_counts()
583 if (vim->vim_havecounts) { in vdev_indirect_mapping_load_obsolete_counts()
584 VERIFY0(dmu_read(vim->vim_objset, in vdev_indirect_mapping_load_obsolete_counts()
585 vim->vim_phys->vimp_counts_object, in vdev_indirect_mapping_load_obsolete_counts()
595 vdev_indirect_mapping_free_obsolete_counts(vdev_indirect_mapping_t *vim, in vdev_indirect_mapping_free_obsolete_counts() argument
598 ASSERT(vdev_indirect_mapping_verify(vim)); in vdev_indirect_mapping_free_obsolete_counts()
600 vmem_free(counts, vim->vim_phys->vimp_num_entries * sizeof (uint32_t)); in vdev_indirect_mapping_free_obsolete_counts()