Lines Matching refs:info
96 static void *element_at(struct dm_array_info *info, struct array_block *ab, in element_at() argument
101 entry += index * info->value_type.size; in element_at()
110 static void on_entries(struct dm_array_info *info, struct array_block *ab, in on_entries() argument
116 fn(info->value_type.context, element_at(info, ab, i)); in on_entries()
122 static void inc_ablock_entries(struct dm_array_info *info, struct array_block *ab) in inc_ablock_entries() argument
124 struct dm_btree_value_type *vt = &info->value_type; in inc_ablock_entries()
127 on_entries(info, ab, vt->inc); in inc_ablock_entries()
133 static void dec_ablock_entries(struct dm_array_info *info, struct array_block *ab) in dec_ablock_entries() argument
135 struct dm_btree_value_type *vt = &info->value_type; in dec_ablock_entries()
138 on_entries(info, ab, vt->dec); in dec_ablock_entries()
152 static int alloc_ablock(struct dm_array_info *info, size_t size_of_block, in alloc_ablock() argument
158 r = dm_tm_new_block(info->btree_info.tm, &array_validator, block); in alloc_ablock()
165 (*ab)->value_size = cpu_to_le32(info->value_type.size); in alloc_ablock()
175 static void fill_ablock(struct dm_array_info *info, struct array_block *ab, in fill_ablock() argument
180 struct dm_btree_value_type *vt = &info->value_type; in fill_ablock()
189 memcpy(element_at(info, ab, i), value, vt->size); in fill_ablock()
199 static void trim_ablock(struct dm_array_info *info, struct array_block *ab, in trim_ablock() argument
204 struct dm_btree_value_type *vt = &info->value_type; in trim_ablock()
212 vt->dec(vt->context, element_at(info, ab, i - 1)); in trim_ablock()
220 static int get_ablock(struct dm_array_info *info, dm_block_t b, in get_ablock() argument
225 r = dm_tm_read_lock(info->btree_info.tm, b, &array_validator, block); in get_ablock()
236 static void unlock_ablock(struct dm_array_info *info, struct dm_block *block) in unlock_ablock() argument
238 dm_tm_unlock(info->btree_info.tm, block); in unlock_ablock()
253 static int lookup_ablock(struct dm_array_info *info, dm_block_t root, in lookup_ablock() argument
261 r = dm_btree_lookup(&info->btree_info, root, &key, &block_le); in lookup_ablock()
265 return get_ablock(info, le64_to_cpu(block_le), block, ab); in lookup_ablock()
271 static int insert_ablock(struct dm_array_info *info, uint64_t index, in insert_ablock() argument
277 return dm_btree_insert(&info->btree_info, *root, &index, &block_le, root); in insert_ablock()
285 static int shadow_ablock(struct dm_array_info *info, dm_block_t *root, in shadow_ablock() argument
297 r = dm_btree_lookup(&info->btree_info, *root, &key, &block_le); in shadow_ablock()
305 r = dm_tm_shadow_block(info->btree_info.tm, b, in shadow_ablock()
312 inc_ablock_entries(info, *ab); in shadow_ablock()
327 dm_tm_inc(info->btree_info.tm, b); in shadow_ablock()
328 r = insert_ablock(info, index, *block, root); in shadow_ablock()
337 static int insert_new_ablock(struct dm_array_info *info, size_t size_of_block, in insert_new_ablock() argument
346 r = alloc_ablock(info, size_of_block, max_entries, &block, &ab); in insert_new_ablock()
350 fill_ablock(info, ab, value, nr); in insert_new_ablock()
351 r = insert_ablock(info, block_index, block, root); in insert_new_ablock()
352 unlock_ablock(info, block); in insert_new_ablock()
357 static int insert_full_ablocks(struct dm_array_info *info, size_t size_of_block, in insert_full_ablocks() argument
365 r = insert_new_ablock(info, size_of_block, max_entries, begin_block, max_entries, value, root); in insert_full_ablocks()
379 struct dm_array_info *info; member
430 r = dm_btree_remove(&resize->info->btree_info, resize->root, in drop_blocks()
476 r = shadow_ablock(resize->info, &resize->root, in shrink()
481 trim_ablock(resize->info, ab, resize->new_nr_entries_in_last_block); in shrink()
482 unlock_ablock(resize->info, block); in shrink()
497 r = shadow_ablock(resize->info, &resize->root, in grow_extend_tail_block()
502 fill_ablock(resize->info, ab, resize->value, new_nr_entries); in grow_extend_tail_block()
503 unlock_ablock(resize->info, block); in grow_extend_tail_block()
510 return insert_new_ablock(resize->info, resize->size_of_block, in grow_add_tail_block()
530 r = insert_full_ablocks(resize->info, resize->size_of_block, in grow_needs_more_blocks()
565 struct dm_array_info *info = context; in block_inc() local
568 dm_tm_inc(info->btree_info.tm, le64_to_cpu(block_le)); in block_inc()
579 struct dm_array_info *info = context; in block_dec() local
584 r = dm_tm_ref(info->btree_info.tm, b, &ref_count); in block_dec()
596 r = get_ablock(info, b, &block, &ab); in block_dec()
603 dec_ablock_entries(info, ab); in block_dec()
604 unlock_ablock(info, block); in block_dec()
607 dm_tm_dec(info->btree_info.tm, b); in block_dec()
617 void dm_array_info_init(struct dm_array_info *info, in dm_array_info_init() argument
621 struct dm_btree_value_type *bvt = &info->btree_info.value_type; in dm_array_info_init()
623 memcpy(&info->value_type, vt, sizeof(info->value_type)); in dm_array_info_init()
624 info->btree_info.tm = tm; in dm_array_info_init()
625 info->btree_info.levels = 1; in dm_array_info_init()
627 bvt->context = info; in dm_array_info_init()
635 int dm_array_empty(struct dm_array_info *info, dm_block_t *root) in dm_array_empty() argument
637 return dm_btree_empty(&info->btree_info, root); in dm_array_empty()
641 static int array_resize(struct dm_array_info *info, dm_block_t root, in array_resize() argument
653 resize.info = info; in array_resize()
655 resize.size_of_block = dm_bm_block_size(dm_tm_get_bm(info->btree_info.tm)); in array_resize()
656 resize.max_entries = calc_max_entries(info->value_type.size, in array_resize()
673 int dm_array_resize(struct dm_array_info *info, dm_block_t root, in dm_array_resize() argument
678 int r = array_resize(info, root, old_size, new_size, value, new_root); in dm_array_resize()
684 int dm_array_del(struct dm_array_info *info, dm_block_t root) in dm_array_del() argument
686 return dm_btree_del(&info->btree_info, root); in dm_array_del()
690 int dm_array_get_value(struct dm_array_info *info, dm_block_t root, in dm_array_get_value() argument
699 size_of_block = dm_bm_block_size(dm_tm_get_bm(info->btree_info.tm)); in dm_array_get_value()
700 max_entries = calc_max_entries(info->value_type.size, size_of_block); in dm_array_get_value()
702 r = lookup_ablock(info, root, index / max_entries, &block, &ab); in dm_array_get_value()
710 memcpy(value_le, element_at(info, ab, entry), in dm_array_get_value()
711 info->value_type.size); in dm_array_get_value()
713 unlock_ablock(info, block); in dm_array_get_value()
718 static int array_set_value(struct dm_array_info *info, dm_block_t root, in array_set_value() argument
728 struct dm_btree_value_type *vt = &info->value_type; in array_set_value()
730 size_of_block = dm_bm_block_size(dm_tm_get_bm(info->btree_info.tm)); in array_set_value()
731 max_entries = calc_max_entries(info->value_type.size, size_of_block); in array_set_value()
733 r = shadow_ablock(info, &root, index / max_entries, &block, &ab); in array_set_value()
744 old_value = element_at(info, ab, entry); in array_set_value()
752 memcpy(old_value, value, info->value_type.size); in array_set_value()
755 unlock_ablock(info, block); in array_set_value()
759 int dm_array_set_value(struct dm_array_info *info, dm_block_t root, in dm_array_set_value() argument
765 r = array_set_value(info, root, index, value, new_root); in dm_array_set_value()
772 struct dm_array_info *info; member
789 r = get_ablock(wi->info, le64_to_cpu(block_le), &block, &ab); in walk_ablock()
797 element_at(wi->info, ab, i)); in walk_ablock()
803 unlock_ablock(wi->info, block); in walk_ablock()
807 int dm_array_walk(struct dm_array_info *info, dm_block_t root, in dm_array_walk() argument
813 wi.info = info; in dm_array_walk()
817 return dm_btree_walk(&info->btree_info, root, walk_ablock, &wi); in dm_array_walk()