Lines Matching refs:vim
293 vdev_indirect_mapping_t *vim; in vdev_indirect_mapping_open() local
297 vim = calloc(1, sizeof (*vim)); in vdev_indirect_mapping_open()
298 if (vim == NULL) in vdev_indirect_mapping_open()
301 vim->vim_dn = calloc(1, sizeof (*vim->vim_dn)); in vdev_indirect_mapping_open()
302 if (vim->vim_dn == NULL) { in vdev_indirect_mapping_open()
303 free(vim); in vdev_indirect_mapping_open()
307 rc = objset_get_dnode(spa, os, mapping_object, vim->vim_dn); in vdev_indirect_mapping_open()
309 free(vim->vim_dn); in vdev_indirect_mapping_open()
310 free(vim); in vdev_indirect_mapping_open()
314 vim->vim_spa = spa; in vdev_indirect_mapping_open()
315 vim->vim_phys = malloc(sizeof (*vim->vim_phys)); in vdev_indirect_mapping_open()
316 if (vim->vim_phys == NULL) { in vdev_indirect_mapping_open()
317 free(vim->vim_dn); in vdev_indirect_mapping_open()
318 free(vim); in vdev_indirect_mapping_open()
322 vim_phys = (vdev_indirect_mapping_phys_t *)DN_BONUS(vim->vim_dn); in vdev_indirect_mapping_open()
323 *vim->vim_phys = *vim_phys; in vdev_indirect_mapping_open()
325 vim->vim_objset = os; in vdev_indirect_mapping_open()
326 vim->vim_object = mapping_object; in vdev_indirect_mapping_open()
327 vim->vim_entries = NULL; in vdev_indirect_mapping_open()
329 vim->vim_havecounts = in vdev_indirect_mapping_open()
330 (vim->vim_dn->dn_bonuslen > VDEV_INDIRECT_MAPPING_SIZE_V0); in vdev_indirect_mapping_open()
332 return (vim); in vdev_indirect_mapping_open()
387 vdev_indirect_mapping_entry(vdev_indirect_mapping_t *vim, uint64_t index) in vdev_indirect_mapping_entry() argument
393 if (vim->vim_phys->vimp_num_entries == 0) in vdev_indirect_mapping_entry()
396 if (vim->vim_entries == NULL) { in vdev_indirect_mapping_entry()
399 bsize = vim->vim_dn->dn_datablkszsec << SPA_MINBLOCKSHIFT; in vdev_indirect_mapping_entry()
400 size = vim->vim_phys->vimp_num_entries * in vdev_indirect_mapping_entry()
401 sizeof (*vim->vim_entries); in vdev_indirect_mapping_entry()
403 size = bsize / sizeof (*vim->vim_entries); in vdev_indirect_mapping_entry()
404 size *= sizeof (*vim->vim_entries); in vdev_indirect_mapping_entry()
406 vim->vim_entries = malloc(size); in vdev_indirect_mapping_entry()
407 if (vim->vim_entries == NULL) in vdev_indirect_mapping_entry()
409 vim->vim_num_entries = size / sizeof (*vim->vim_entries); in vdev_indirect_mapping_entry()
410 offset = index * sizeof (*vim->vim_entries); in vdev_indirect_mapping_entry()
415 if (index >= vim->vim_entry_offset && in vdev_indirect_mapping_entry()
416 index <= vim->vim_entry_offset + vim->vim_num_entries) { in vdev_indirect_mapping_entry()
417 index -= vim->vim_entry_offset; in vdev_indirect_mapping_entry()
418 return (&vim->vim_entries[index]); in vdev_indirect_mapping_entry()
420 offset = index * sizeof (*vim->vim_entries); in vdev_indirect_mapping_entry()
423 vim->vim_entry_offset = index; in vdev_indirect_mapping_entry()
424 size = vim->vim_num_entries * sizeof (*vim->vim_entries); in vdev_indirect_mapping_entry()
425 rc = dnode_read(vim->vim_spa, vim->vim_dn, offset, vim->vim_entries, in vdev_indirect_mapping_entry()
429 free(vim->vim_entries); in vdev_indirect_mapping_entry()
430 vim->vim_entries = NULL; in vdev_indirect_mapping_entry()
433 index -= vim->vim_entry_offset; in vdev_indirect_mapping_entry()
434 return (&vim->vim_entries[index]); in vdev_indirect_mapping_entry()
457 vdev_indirect_mapping_entry_for_offset(vdev_indirect_mapping_t *vim, in vdev_indirect_mapping_entry_for_offset() argument
460 ASSERT(vim->vim_phys->vimp_num_entries > 0); in vdev_indirect_mapping_entry_for_offset()
464 uint64_t last = vim->vim_phys->vimp_num_entries - 1; in vdev_indirect_mapping_entry_for_offset()
477 entry = vdev_indirect_mapping_entry(vim, mid); in vdev_indirect_mapping_entry_for_offset()
507 vdev_indirect_mapping_t *vim = vd->v_mapping; in vdev_indirect_mapping_duplicate_adjacent_entries() local
511 vdev_indirect_mapping_entry_for_offset(vim, offset); in vdev_indirect_mapping_duplicate_adjacent_entries()