Lines Matching refs:ab

97 static void *element_at(struct dm_array_info *info, struct array_block *ab,  in element_at()  argument
100 unsigned char *entry = (unsigned char *) (ab + 1); in element_at()
111 static void on_entries(struct dm_array_info *info, struct array_block *ab, in on_entries() argument
114 unsigned int nr_entries = le32_to_cpu(ab->nr_entries); in on_entries()
116 fn(info->value_type.context, element_at(info, ab, 0), nr_entries); in on_entries()
122 static void inc_ablock_entries(struct dm_array_info *info, struct array_block *ab) in inc_ablock_entries() argument
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
138 on_entries(info, ab, vt->dec); in dec_ablock_entries()
154 struct dm_block **block, struct array_block **ab) in alloc_ablock() argument
162 (*ab) = dm_block_data(*block); in alloc_ablock()
163 (*ab)->max_entries = cpu_to_le32(max_entries); in alloc_ablock()
164 (*ab)->nr_entries = cpu_to_le32(0); 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
181 BUG_ON(new_nr > le32_to_cpu(ab->max_entries)); in fill_ablock()
182 BUG_ON(new_nr < le32_to_cpu(ab->nr_entries)); in fill_ablock()
184 nr_entries = le32_to_cpu(ab->nr_entries); in fill_ablock()
189 memcpy(element_at(info, ab, i), value, vt->size); in fill_ablock()
190 ab->nr_entries = cpu_to_le32(new_nr); in fill_ablock()
198 static void trim_ablock(struct dm_array_info *info, struct array_block *ab, in trim_ablock() argument
204 BUG_ON(new_nr > le32_to_cpu(ab->max_entries)); in trim_ablock()
205 BUG_ON(new_nr > le32_to_cpu(ab->nr_entries)); in trim_ablock()
207 nr_entries = le32_to_cpu(ab->nr_entries); in trim_ablock()
210 vt->dec(vt->context, element_at(info, ab, new_nr - 1), delta); in trim_ablock()
211 ab->nr_entries = cpu_to_le32(new_nr); in trim_ablock()
219 struct dm_block **block, struct array_block **ab) in get_ablock() argument
227 *ab = dm_block_data(*block); in get_ablock()
253 struct array_block **ab) in lookup_ablock() argument
263 return get_ablock(info, le64_to_cpu(block_le), block, ab); in lookup_ablock()
281 struct dm_block **block, struct array_block **ab) in __shadow_ablock() argument
289 *ab = dm_block_data(*block); in __shadow_ablock()
291 inc_ablock_entries(info, *ab); in __shadow_ablock()
327 struct array_block **ab) in shadow_ablock() argument
339 r = __shadow_ablock(info, b, block, ab); in shadow_ablock()
356 struct array_block *ab; in insert_new_ablock() local
358 r = alloc_ablock(info, size_of_block, max_entries, &block, &ab); in insert_new_ablock()
362 fill_ablock(info, ab, value, nr); in insert_new_ablock()
469 struct array_block *ab; in shrink() local
490 resize->new_nr_full_blocks, &block, &ab); in shrink()
494 trim_ablock(resize->info, ab, resize->new_nr_entries_in_last_block); in shrink()
508 struct array_block *ab; in grow_extend_tail_block() local
511 resize->old_nr_full_blocks, &block, &ab); in grow_extend_tail_block()
515 fill_ablock(resize->info, ab, resize->value, new_nr_entries); in grow_extend_tail_block()
592 struct array_block *ab; in __block_dec() local
610 r = get_ablock(info, b, &block, &ab); in __block_dec()
617 dec_ablock_entries(info, ab); in __block_dec()
707 static int populate_ablock_with_values(struct dm_array_info *info, struct array_block *ab, in populate_ablock_with_values() argument
715 BUG_ON(le32_to_cpu(ab->nr_entries)); in populate_ablock_with_values()
716 BUG_ON(new_nr > le32_to_cpu(ab->max_entries)); in populate_ablock_with_values()
719 r = fn(base + i, element_at(info, ab, i), context); in populate_ablock_with_values()
724 vt->inc(vt->context, element_at(info, ab, i), 1); in populate_ablock_with_values()
727 ab->nr_entries = cpu_to_le32(new_nr); in populate_ablock_with_values()
736 struct array_block *ab; in dm_array_new() local
748 r = alloc_ablock(info, size_of_block, max_entries, &block, &ab); in dm_array_new()
752 r = populate_ablock_with_values(info, ab, fn, context, in dm_array_new()
783 struct array_block *ab; in dm_array_get_value() local
790 r = lookup_ablock(info, root, index / max_entries, &block, &ab); in dm_array_get_value()
795 if (entry >= le32_to_cpu(ab->nr_entries)) in dm_array_get_value()
798 memcpy(value_le, element_at(info, ab, entry), in dm_array_get_value()
811 struct array_block *ab; in array_set_value() local
821 r = shadow_ablock(info, &root, index / max_entries, &block, &ab); in array_set_value()
827 if (entry >= le32_to_cpu(ab->nr_entries)) { in array_set_value()
832 old_value = element_at(info, ab, entry); in array_set_value()
874 struct array_block *ab; in walk_ablock() local
877 r = get_ablock(wi->info, le64_to_cpu(block_le), &block, &ab); in walk_ablock()
881 max_entries = le32_to_cpu(ab->max_entries); in walk_ablock()
882 nr_entries = le32_to_cpu(ab->nr_entries); in walk_ablock()
885 element_at(wi->info, ab, i)); in walk_ablock()
928 r = get_ablock(c->info, le64_to_cpu(value_le), &c->block, &c->ab); in load_ablock()
940 c->ab = NULL; in load_ablock()
979 if (c->index >= le32_to_cpu(c->ab->nr_entries)) { in dm_array_cursor_next()
998 uint32_t remaining = le32_to_cpu(c->ab->nr_entries) - c->index; in dm_array_cursor_skip()
1017 *value_le = element_at(c->info, c->ab, c->index); in dm_array_cursor_get_value()