Lines Matching refs:ab

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