Lines Matching refs:volume_index

162 static inline bool has_sparse(const struct volume_index *volume_index)
164 return volume_index->sparse_sample_rate > 0;
167 bool uds_is_volume_index_sample(const struct volume_index *volume_index,
170 if (!has_sparse(volume_index))
173 return (uds_extract_sampling_bytes(name) % volume_index->sparse_sample_rate) == 0;
177 get_volume_sub_index(const struct volume_index *volume_index,
180 return (uds_is_volume_index_sample(volume_index, name) ?
181 &volume_index->vi_hook :
182 &volume_index->vi_non_hook);
191 unsigned int uds_get_volume_index_zone(const struct volume_index *volume_index,
194 return get_volume_sub_index_zone(get_volume_sub_index(volume_index, name), name);
287 void uds_free_volume_index(struct volume_index *volume_index)
289 if (volume_index == NULL)
292 if (volume_index->zones != NULL)
293 vdo_free(vdo_forget(volume_index->zones));
295 uninitialize_volume_sub_index(&volume_index->vi_non_hook);
296 uninitialize_volume_sub_index(&volume_index->vi_hook);
297 vdo_free(volume_index);
531 int uds_get_volume_index_record(struct volume_index *volume_index,
537 if (uds_is_volume_index_sample(volume_index, name)) {
544 get_volume_sub_index_zone(&volume_index->vi_hook, name);
545 struct mutex *mutex = &volume_index->zones[zone].hook_mutex;
548 result = get_volume_sub_index_record(&volume_index->vi_hook, name,
554 result = get_volume_sub_index_record(&volume_index->vi_non_hook, name,
675 void uds_set_volume_index_zone_open_chapter(struct volume_index *volume_index,
679 struct mutex *mutex = &volume_index->zones[zone_number].hook_mutex;
681 set_volume_sub_index_zone_open_chapter(&volume_index->vi_non_hook, zone_number,
688 if (has_sparse(volume_index)) {
690 set_volume_sub_index_zone_open_chapter(&volume_index->vi_hook,
700 void uds_set_volume_index_open_chapter(struct volume_index *volume_index,
705 for (zone = 0; zone < volume_index->zone_count; zone++)
706 uds_set_volume_index_zone_open_chapter(volume_index, zone, virtual_chapter);
776 u64 uds_lookup_volume_index_name(const struct volume_index *volume_index,
779 unsigned int zone_number = uds_get_volume_index_zone(volume_index, name);
780 struct mutex *mutex = &volume_index->zones[zone_number].hook_mutex;
783 if (!uds_is_volume_index_sample(volume_index, name))
787 virtual_chapter = lookup_volume_sub_index_name(&volume_index->vi_hook, name);
798 static void abort_restoring_volume_index(struct volume_index *volume_index)
800 abort_restoring_volume_sub_index(&volume_index->vi_non_hook);
801 if (has_sparse(volume_index))
802 abort_restoring_volume_sub_index(&volume_index->vi_hook);
899 static int start_restoring_volume_index(struct volume_index *volume_index,
906 if (!has_sparse(volume_index)) {
907 return start_restoring_volume_sub_index(&volume_index->vi_non_hook,
938 volume_index->sparse_sample_rate = header.sparse_sample_rate;
939 } else if (volume_index->sparse_sample_rate != header.sparse_sample_rate) {
942 volume_index->sparse_sample_rate,
948 result = start_restoring_volume_sub_index(&volume_index->vi_non_hook,
953 return start_restoring_volume_sub_index(&volume_index->vi_hook, buffered_readers,
965 static int finish_restoring_volume_index(struct volume_index *volume_index,
971 result = finish_restoring_volume_sub_index(&volume_index->vi_non_hook,
973 if ((result == UDS_SUCCESS) && has_sparse(volume_index)) {
974 result = finish_restoring_volume_sub_index(&volume_index->vi_hook,
982 int uds_load_volume_index(struct volume_index *volume_index,
988 result = start_restoring_volume_index(volume_index, readers, reader_count);
992 result = finish_restoring_volume_index(volume_index, readers, reader_count);
994 abort_restoring_volume_index(volume_index);
1001 abort_restoring_volume_index(volume_index);
1053 static int start_saving_volume_index(const struct volume_index *volume_index,
1061 if (!has_sparse(volume_index)) {
1062 return start_saving_volume_sub_index(&volume_index->vi_non_hook,
1068 encode_u32_le(buffer, &offset, volume_index->sparse_sample_rate);
1081 result = start_saving_volume_sub_index(&volume_index->vi_non_hook, zone_number,
1086 return start_saving_volume_sub_index(&volume_index->vi_hook, zone_number,
1096 static int finish_saving_volume_index(const struct volume_index *volume_index,
1101 result = finish_saving_volume_sub_index(&volume_index->vi_non_hook, zone_number);
1102 if ((result == UDS_SUCCESS) && has_sparse(volume_index))
1103 result = finish_saving_volume_sub_index(&volume_index->vi_hook, zone_number);
1107 int uds_save_volume_index(struct volume_index *volume_index,
1114 result = start_saving_volume_index(volume_index, zone, writers[zone]);
1118 result = finish_saving_volume_index(volume_index, zone);
1153 void uds_get_volume_index_stats(const struct volume_index *volume_index,
1158 get_volume_sub_index_stats(&volume_index->vi_non_hook, stats);
1159 if (!has_sparse(volume_index))
1162 get_volume_sub_index_stats(&volume_index->vi_hook, &sparse_stats);
1224 struct volume_index **volume_index_ptr)
1228 struct volume_index *volume_index;
1231 result = vdo_allocate(1, struct volume_index, "volume index", &volume_index);
1235 volume_index->zone_count = config->zone_count;
1239 &volume_index->vi_non_hook);
1241 uds_free_volume_index(volume_index);
1245 volume_index->memory_size = volume_index->vi_non_hook.memory_size;
1246 *volume_index_ptr = volume_index;
1250 volume_index->sparse_sample_rate = config->sparse_sample_rate;
1253 "volume index zones", &volume_index->zones);
1255 uds_free_volume_index(volume_index);
1260 mutex_init(&volume_index->zones[zone].hook_mutex);
1264 &volume_index->vi_non_hook);
1266 uds_free_volume_index(volume_index);
1272 &volume_index->vi_hook);
1274 uds_free_volume_index(volume_index);
1279 volume_index->memory_size =
1280 volume_index->vi_non_hook.memory_size + volume_index->vi_hook.memory_size;
1281 *volume_index_ptr = volume_index;