Lines Matching defs:info

97 static void *element_at(struct dm_array_info *info, struct array_block *ab,
102 entry += index * info->value_type.size;
111 static void on_entries(struct dm_array_info *info, struct array_block *ab,
116 fn(info->value_type.context, element_at(info, ab, 0), nr_entries);
122 static void inc_ablock_entries(struct dm_array_info *info, struct array_block *ab)
124 struct dm_btree_value_type *vt = &info->value_type;
127 on_entries(info, ab, vt->inc);
133 static void dec_ablock_entries(struct dm_array_info *info, struct array_block *ab)
135 struct dm_btree_value_type *vt = &info->value_type;
138 on_entries(info, ab, vt->dec);
152 static int alloc_ablock(struct dm_array_info *info, size_t size_of_block,
158 r = dm_tm_new_block(info->btree_info.tm, &array_validator, block);
165 (*ab)->value_size = cpu_to_le32(info->value_type.size);
175 static void fill_ablock(struct dm_array_info *info, struct array_block *ab,
179 struct dm_btree_value_type *vt = &info->value_type;
189 memcpy(element_at(info, ab, i), value, vt->size);
198 static void trim_ablock(struct dm_array_info *info, struct array_block *ab,
202 struct dm_btree_value_type *vt = &info->value_type;
210 vt->dec(vt->context, element_at(info, ab, new_nr - 1), delta);
218 static int get_ablock(struct dm_array_info *info, dm_block_t b,
223 r = dm_tm_read_lock(info->btree_info.tm, b, &array_validator, block);
234 static void unlock_ablock(struct dm_array_info *info, struct dm_block *block)
236 dm_tm_unlock(info->btree_info.tm, block);
251 static int lookup_ablock(struct dm_array_info *info, dm_block_t root,
259 r = dm_btree_lookup(&info->btree_info, root, &key, &block_le);
263 return get_ablock(info, le64_to_cpu(block_le), block, ab);
269 static int insert_ablock(struct dm_array_info *info, uint64_t index,
275 return dm_btree_insert(&info->btree_info, *root, &index, &block_le, root);
280 static int __shadow_ablock(struct dm_array_info *info, dm_block_t b,
284 int r = dm_tm_shadow_block(info->btree_info.tm, b,
291 inc_ablock_entries(info, *ab);
300 static int __reinsert_ablock(struct dm_array_info *info, unsigned int index,
313 dm_tm_inc(info->btree_info.tm, b);
314 r = insert_ablock(info, index, block, root);
325 static int shadow_ablock(struct dm_array_info *info, dm_block_t *root,
334 r = dm_btree_lookup(&info->btree_info, *root, &key, &block_le);
339 r = __shadow_ablock(info, b, block, ab);
343 return __reinsert_ablock(info, index, *block, b, root);
349 static int insert_new_ablock(struct dm_array_info *info, size_t size_of_block,
358 r = alloc_ablock(info, size_of_block, max_entries, &block, &ab);
362 fill_ablock(info, ab, value, nr);
363 r = insert_ablock(info, block_index, block, root);
364 unlock_ablock(info, block);
369 static int insert_full_ablocks(struct dm_array_info *info, size_t size_of_block,
377 r = insert_new_ablock(info, size_of_block, max_entries, begin_block, max_entries, value, root);
391 struct dm_array_info *info;
443 r = dm_btree_remove(&resize->info->btree_info, resize->root,
489 r = shadow_ablock(resize->info, &resize->root,
494 trim_ablock(resize->info, ab, resize->new_nr_entries_in_last_block);
495 unlock_ablock(resize->info, block);
510 r = shadow_ablock(resize->info, &resize->root,
515 fill_ablock(resize->info, ab, resize->value, new_nr_entries);
516 unlock_ablock(resize->info, block);
523 return insert_new_ablock(resize->info, resize->size_of_block,
543 r = insert_full_ablocks(resize->info, resize->size_of_block,
578 struct dm_array_info *info = context;
582 dm_tm_inc(info->btree_info.tm, le64_to_cpu(*block_le));
593 struct dm_array_info *info = context;
598 r = dm_tm_ref(info->btree_info.tm, b, &ref_count);
610 r = get_ablock(info, b, &block, &ab);
617 dec_ablock_entries(info, ab);
618 unlock_ablock(info, block);
621 dm_tm_dec(info->btree_info.tm, b);
639 void dm_array_info_init(struct dm_array_info *info,
643 struct dm_btree_value_type *bvt = &info->btree_info.value_type;
645 memcpy(&info->value_type, vt, sizeof(info->value_type));
646 info->btree_info.tm = tm;
647 info->btree_info.levels = 1;
649 bvt->context = info;
657 int dm_array_empty(struct dm_array_info *info, dm_block_t *root)
659 return dm_btree_empty(&info->btree_info, root);
663 static int array_resize(struct dm_array_info *info, dm_block_t root,
675 resize.info = info;
677 resize.size_of_block = dm_bm_block_size(dm_tm_get_bm(info->btree_info.tm));
678 resize.max_entries = calc_max_entries(info->value_type.size,
695 int dm_array_resize(struct dm_array_info *info, dm_block_t root,
700 int r = array_resize(info, root, old_size, new_size, value, new_root);
707 static int populate_ablock_with_values(struct dm_array_info *info, struct array_block *ab,
713 struct dm_btree_value_type *vt = &info->value_type;
719 r = fn(base + i, element_at(info, ab, i), context);
724 vt->inc(vt->context, element_at(info, ab, i), 1);
731 int dm_array_new(struct dm_array_info *info, dm_block_t *root,
739 r = dm_array_empty(info, root);
743 size_of_block = dm_bm_block_size(dm_tm_get_bm(info->btree_info.tm));
744 max_entries = calc_max_entries(info->value_type.size, size_of_block);
748 r = alloc_ablock(info, size_of_block, max_entries, &block, &ab);
752 r = populate_ablock_with_values(info, ab, fn, context,
756 unlock_ablock(info, block);
760 r = insert_ablock(info, block_index, block, root);
761 unlock_ablock(info, block);
772 int dm_array_del(struct dm_array_info *info, dm_block_t root)
774 return dm_btree_del(&info->btree_info, root);
778 int dm_array_get_value(struct dm_array_info *info, dm_block_t root,
787 size_of_block = dm_bm_block_size(dm_tm_get_bm(info->btree_info.tm));
788 max_entries = calc_max_entries(info->value_type.size, size_of_block);
790 r = lookup_ablock(info, root, index / max_entries, &block, &ab);
798 memcpy(value_le, element_at(info, ab, entry),
799 info->value_type.size);
801 unlock_ablock(info, block);
806 static int array_set_value(struct dm_array_info *info, dm_block_t root,
816 struct dm_btree_value_type *vt = &info->value_type;
818 size_of_block = dm_bm_block_size(dm_tm_get_bm(info->btree_info.tm));
819 max_entries = calc_max_entries(info->value_type.size, size_of_block);
821 r = shadow_ablock(info, &root, index / max_entries, &block, &ab);
832 old_value = element_at(info, ab, entry);
840 memcpy(old_value, value, info->value_type.size);
843 unlock_ablock(info, block);
847 int dm_array_set_value(struct dm_array_info *info, dm_block_t root,
853 r = array_set_value(info, root, index, value, new_root);
860 struct dm_array_info *info;
877 r = get_ablock(wi->info, le64_to_cpu(block_le), &block, &ab);
885 element_at(wi->info, ab, i));
891 unlock_ablock(wi->info, block);
895 int dm_array_walk(struct dm_array_info *info, dm_block_t root,
901 wi.info = info;
905 return dm_btree_walk(&info->btree_info, root, walk_ablock, &wi);
918 unlock_ablock(c->info, c->block);
930 r = get_ablock(c->info, le64_to_cpu(value_le), &c->block, &c->ab);
940 int dm_array_cursor_begin(struct dm_array_info *info, dm_block_t root,
946 c->info = info;
947 r = dm_btree_cursor_begin(&info->btree_info, root, true, &c->cursor);
960 unlock_ablock(c->info, c->block);
1012 *value_le = element_at(c->info, c->ab, c->index);