delta_index
struct fixed31_32 delta_index;
delta_index = dc_fixpt_sub(norm_y, index_f);
dc_fixpt_mul(delta_index, delta_lut));
struct delta_index *delta_index = &chapter_index->delta_index;
result = uds_pack_delta_index_page(delta_index, nonce, memory,
uds_get_delta_index_stats(delta_index, &stats);
result = uds_start_delta_index_search(delta_index, next_list, 0,
const struct delta_index *delta_index = &index_page->delta_index;
result = uds_start_delta_index_search(delta_index, list_number - first,
struct delta_index *delta_index = &index_page->delta_index;
result = uds_get_delta_index_entry(delta_index, sub_list_number, address,
result = uds_initialize_delta_index(&index->delta_index, 1,
index->memory_size = index->delta_index.memory_size + sizeof(struct open_chapter_index);
uds_uninitialize_delta_index(&chapter_index->delta_index);
uds_reset_delta_index(&chapter_index->delta_index);
result = uds_get_delta_index_entry(&chapter_index->delta_index, list_number,
struct delta_index delta_index;
if (save_info.tag != delta_index->tag)
if (save_info.index >= delta_index->list_count) {
delta_index->list_count);
delta_index->load_lists[load_zone] -= 1;
new_zone = save_info.index / delta_index->lists_per_zone;
return restore_delta_list_to_zone(&delta_index->delta_zones[new_zone],
int uds_finish_restoring_delta_index(struct delta_index *delta_index,
while (delta_index->load_lists[z] > 0) {
result = restore_delta_list_data(delta_index, z,
int uds_start_saving_delta_index(const struct delta_index *delta_index,
delta_zone = &delta_index->delta_zones[zone_number];
encode_u32_le(buffer, &offset, delta_index->zone_count);
int uds_finish_saving_delta_index(const struct delta_index *delta_index,
delta_zone = &delta_index->delta_zones[zone_number];
int uds_start_delta_index_search(const struct delta_index *delta_index, u32 list_number,
result = VDO_ASSERT((list_number < delta_index->list_count),
delta_index->list_count);
zone_number = list_number / delta_index->lists_per_zone;
delta_zone = &delta_index->delta_zones[zone_number];
if (delta_index->mutable) {
int uds_get_delta_index_entry(const struct delta_index *delta_index, u32 list_number,
result = uds_start_delta_index_search(delta_index, list_number, key,
void uds_get_delta_index_stats(const struct delta_index *delta_index,
for (z = 0; z < delta_index->zone_count; z++) {
delta_zone = &delta_index->delta_zones[z];
void uds_reset_delta_index(const struct delta_index *delta_index)
for (z = 0; z < delta_index->zone_count; z++) {
struct delta_zone *zone = &delta_index->delta_zones[z];
void uds_uninitialize_delta_index(struct delta_index *delta_index)
if (delta_index->delta_zones == NULL)
for (z = 0; z < delta_index->zone_count; z++) {
vdo_free(vdo_forget(delta_index->delta_zones[z].new_offsets));
vdo_free(vdo_forget(delta_index->delta_zones[z].delta_lists));
vdo_free(vdo_forget(delta_index->delta_zones[z].memory));
vdo_free(delta_index->delta_zones);
memset(delta_index, 0, sizeof(struct delta_index));
int uds_initialize_delta_index(struct delta_index *delta_index, unsigned int zone_count,
result = vdo_allocate(zone_count, "Delta Index Zones", &delta_index->delta_zones);
delta_index->zone_count = zone_count;
delta_index->list_count = list_count;
delta_index->lists_per_zone = DIV_ROUND_UP(list_count, zone_count);
delta_index->memory_size = 0;
delta_index->mutable = true;
delta_index->tag = tag;
u32 lists_in_zone = delta_index->lists_per_zone;
if (delta_index->list_count <= first_list_in_zone) {
uds_uninitialize_delta_index(delta_index);
lists_in_zone = delta_index->list_count - first_list_in_zone;
result = initialize_delta_zone(&delta_index->delta_zones[z], zone_memory,
uds_uninitialize_delta_index(delta_index);
delta_index->memory_size +=
uds_reset_delta_index(delta_index);
delta_index_page->delta_index.delta_zones = delta_zone;
delta_index_page->delta_index.zone_count = 1;
delta_index_page->delta_index.list_count = list_count;
delta_index_page->delta_index.lists_per_zone = list_count;
delta_index_page->delta_index.mutable = false;
delta_index_page->delta_index.tag = 'p';
int uds_pack_delta_index_page(const struct delta_index *delta_index, u64 header_nonce,
delta_zone = &delta_index->delta_zones[0];
max_lists = delta_index->list_count - first_list;
int uds_start_restoring_delta_index(struct delta_index *delta_index,
if (list_next != delta_index->list_count) {
list_next, delta_index->list_count);
uds_reset_delta_index(delta_index);
delta_index->delta_zones[0].record_count = record_count;
delta_index->delta_zones[0].collision_count = collision_count;
delta_index->load_lists[z] = 0;
delta_index->load_lists[z] += 1;
zone_number = list_number / delta_index->lists_per_zone;
delta_zone = &delta_index->delta_zones[zone_number];
for (z = 0; z < delta_index->zone_count; z++)
rebalance_lists(&delta_index->delta_zones[z]);
static int restore_delta_list_data(struct delta_index *delta_index, unsigned int load_zone,
struct delta_index delta_index;
int __must_check uds_initialize_delta_index(struct delta_index *delta_index,
void uds_uninitialize_delta_index(struct delta_index *delta_index);
void uds_reset_delta_index(const struct delta_index *delta_index);
int __must_check uds_pack_delta_index_page(const struct delta_index *delta_index,
int __must_check uds_start_restoring_delta_index(struct delta_index *delta_index,
int __must_check uds_finish_restoring_delta_index(struct delta_index *delta_index,
int __must_check uds_start_saving_delta_index(const struct delta_index *delta_index,
int __must_check uds_finish_saving_delta_index(const struct delta_index *delta_index,
int __must_check uds_start_delta_index_search(const struct delta_index *delta_index,
int __must_check uds_get_delta_index_entry(const struct delta_index *delta_index,
void uds_get_delta_index_stats(const struct delta_index *delta_index,
u32 first_list = sub_index->delta_index.delta_zones[zone_number].first_list;
u32 list_count = sub_index->delta_index.delta_zones[zone_number].list_count;
return uds_start_saving_delta_index(&sub_index->delta_index, zone_number,
return uds_finish_saving_delta_index(&sub_index->delta_index, zone_number);
uds_get_delta_index_stats(&sub_index->delta_index, &dis);
result = uds_initialize_delta_index(&sub_index->delta_index, zone_count,
for (z = 0; z < sub_index->delta_index.zone_count; z++)
available_bytes += sub_index->delta_index.delta_zones[z].size;
sub_index->memory_size = (sub_index->delta_index.memory_size +
return extract_dlist_num(sub_index, name) / sub_index->delta_index.lists_per_zone;
uds_uninitialize_delta_index(&sub_index->delta_index);
result = uds_start_delta_index_search(&sub_index->delta_index, list_number, 0,
record->zone_number = delta_list_number / sub_index->delta_index.lists_per_zone;
result = uds_get_delta_index_entry(&sub_index->delta_index,
delta_zone = &sub_index->delta_index.delta_zones[zone_number];
result = uds_get_delta_index_entry(&sub_index->delta_index, delta_list_number,
uds_reset_delta_index(&sub_index->delta_index);
result = uds_start_restoring_delta_index(&sub_index->delta_index, readers,
return uds_finish_restoring_delta_index(&sub_index->delta_index,
struct delta_index delta_index;