Lines Matching full:geometry

21 #include "geometry.h"
86 static inline u32 map_to_page_number(struct index_geometry *geometry, u32 physical_page) in map_to_page_number() argument
88 return (physical_page - HEADER_PAGES_PER_VOLUME) % geometry->pages_per_chapter; in map_to_page_number()
91 static inline u32 map_to_chapter_number(struct index_geometry *geometry, u32 physical_page) in map_to_chapter_number() argument
93 return (physical_page - HEADER_PAGES_PER_VOLUME) / geometry->pages_per_chapter; in map_to_chapter_number()
96 static inline bool is_record_page(struct index_geometry *geometry, u32 physical_page) in is_record_page() argument
98 return map_to_page_number(geometry, physical_page) >= geometry->index_pages_per_chapter; in is_record_page()
101 static u32 map_to_physical_page(const struct index_geometry *geometry, u32 chapter, u32 page) in map_to_physical_page() argument
104 return HEADER_PAGES_PER_VOLUME + (geometry->pages_per_chapter * chapter) + page; in map_to_physical_page()
425 struct index_geometry *geometry = volume->geometry; in init_chapter_index_page() local
428 result = uds_initialize_chapter_index_page(chapter_index_page, geometry, in init_chapter_index_page()
442 ci_chapter = uds_map_to_physical_chapter(geometry, ci_virtual); in init_chapter_index_page()
462 u32 chapter = map_to_chapter_number(volume->geometry, physical_page); in initialize_index_page()
463 u32 index_page_number = map_to_page_number(volume->geometry, physical_page); in initialize_index_page()
471 const struct index_geometry *geometry, in search_record_page() argument
481 while (node < geometry->records_per_page) { in search_record_page()
513 if (is_record_page(volume->geometry, physical_page)) { in search_page()
515 &request->record_name, volume->geometry, in search_page()
522 volume->geometry, in search_page()
574 if (!is_record_page(volume->geometry, page_number)) { in process_entry()
711 if (!is_record_page(volume->geometry, physical_page)) { in read_page_locked()
810 u32 physical_page = map_to_physical_page(volume->geometry, chapter, page_number); in get_volume_page()
852 u32 physical_page = map_to_physical_page(volume->geometry, chapter, in search_cached_index_page()
869 result = uds_search_chapter_index_page(&page->index_page, volume->geometry, in search_cached_index_page()
884 struct index_geometry *geometry = volume->geometry; in uds_search_cached_record_page() local
892 result = VDO_ASSERT(record_page_number < geometry->record_pages_per_chapter, in uds_search_cached_record_page()
894 geometry->record_pages_per_chapter); in uds_search_cached_record_page()
898 page_number = geometry->index_pages_per_chapter + record_page_number; in uds_search_cached_record_page()
900 physical_page = map_to_physical_page(volume->geometry, chapter, page_number); in uds_search_cached_record_page()
917 &request->record_name, geometry, &request->old_metadata)) in uds_search_cached_record_page()
926 const struct index_geometry *geometry = volume->geometry; in uds_prefetch_volume_chapter() local
927 u32 physical_page = map_to_physical_page(geometry, chapter, 0); in uds_prefetch_volume_chapter()
929 dm_bufio_prefetch(volume->client, physical_page, geometry->pages_per_chapter); in uds_prefetch_volume_chapter()
938 const struct index_geometry *geometry = volume->geometry; in uds_read_chapter_index_from_volume() local
939 u32 physical_chapter = uds_map_to_physical_chapter(geometry, virtual_chapter); in uds_read_chapter_index_from_volume()
940 u32 physical_page = map_to_physical_page(geometry, physical_chapter, 0); in uds_read_chapter_index_from_volume()
942 dm_bufio_prefetch(volume->client, physical_page, geometry->index_pages_per_chapter); in uds_read_chapter_index_from_volume()
943 for (i = 0; i < geometry->index_pages_per_chapter; i++) { in uds_read_chapter_index_from_volume()
970 uds_map_to_physical_chapter(volume->geometry, request->virtual_chapter); in uds_search_volume_page_cache()
997 struct index_geometry *geometry = volume->geometry; in uds_search_volume_page_cache_for_rebuild() local
999 u32 physical_chapter = uds_map_to_physical_chapter(geometry, virtual_chapter); in uds_search_volume_page_cache_for_rebuild()
1012 result = uds_search_chapter_index_page(&page->index_page, geometry, name, in uds_search_volume_page_cache_for_rebuild()
1020 page_number = geometry->index_pages_per_chapter + record_page_number; in uds_search_volume_page_cache_for_rebuild()
1026 geometry, NULL); in uds_search_volume_page_cache_for_rebuild()
1050 uds_map_to_physical_chapter(volume->geometry, virtual_chapter); in uds_forget_chapter()
1051 u32 first_page = map_to_physical_page(volume->geometry, physical_chapter, 0); in uds_forget_chapter()
1056 for (i = 0; i < volume->geometry->pages_per_chapter; i++) in uds_forget_chapter()
1071 map_to_physical_page(volume->geometry, physical_chapter, in donate_index_page_locked()
1098 struct index_geometry *geometry = volume->geometry; in write_index_pages() local
1100 u32 first_index_page = map_to_physical_page(geometry, physical_chapter_number, 0); in write_index_pages()
1105 index_page_number < geometry->index_pages_per_chapter; in write_index_pages()
1119 last_page = ((index_page_number + 1) == geometry->index_pages_per_chapter); in write_index_pages()
1185 u32 records_per_page = volume->geometry->records_per_page; in encode_record_page()
1209 struct index_geometry *geometry = volume->geometry; in write_record_pages() local
1212 u32 first_record_page = map_to_physical_page(geometry, physical_chapter_number, in write_record_pages()
1213 geometry->index_pages_per_chapter); in write_record_pages()
1216 record_page_number < geometry->record_pages_per_chapter; in write_record_pages()
1236 next_record += geometry->records_per_page; in write_record_pages()
1249 uds_map_to_physical_chapter(volume->geometry, in uds_write_chapter()
1270 const struct index_geometry *geometry = volume->geometry; in probe_chapter() local
1277 map_to_physical_page(geometry, chapter_number, 0), in probe_chapter()
1278 geometry->index_pages_per_chapter); in probe_chapter()
1280 for (i = 0; i < geometry->index_pages_per_chapter; i++) { in probe_chapter()
1311 result = uds_validate_chapter_index_page(page, geometry); in probe_chapter()
1316 if (chapter_number != uds_map_to_physical_chapter(geometry, vcn)) { in probe_chapter()
1318 (unsigned long long) vcn, geometry->chapters_per_volume); in probe_chapter()
1354 struct index_geometry *geometry = volume->geometry; in find_chapter_limits() local
1384 if (geometry->remapped_physical > 0) { in find_chapter_limits()
1387 probe_chapter(volume, geometry->remapped_physical, &remapped_vcn); in find_chapter_limits()
1388 if (remapped_vcn == geometry->remapped_virtual) in find_chapter_limits()
1389 moved_chapter = geometry->remapped_physical; in find_chapter_limits()
1420 if ((moved_chapter != BAD_CHAPTER) && (lowest == geometry->remapped_virtual + 1)) in find_chapter_limits()
1421 lowest = geometry->remapped_virtual; in find_chapter_limits()
1452 u32 chapter_limit = volume->geometry->chapters_per_volume; in uds_find_volume_chapter_boundaries()
1487 return uds_open_volume_bufio(layout, volume->geometry->bytes_per_page, in uds_replace_volume_storage()
1492 const struct index_geometry *geometry, in initialize_page_cache() argument
1499 cache->indexable_pages = geometry->pages_per_volume + 1; in initialize_page_cache()
1500 cache->cache_slots = chapters_in_cache * geometry->record_pages_per_chapter; in initialize_page_cache()
1545 struct index_geometry *geometry; in uds_make_volume() local
1555 result = uds_copy_index_geometry(config->geometry, &volume->geometry); in uds_make_volume()
1559 "failed to allocate geometry: error"); in uds_make_volume()
1561 geometry = volume->geometry; in uds_make_volume()
1567 reserved_buffers = config->cache_chapters * geometry->record_pages_per_chapter; in uds_make_volume()
1569 if (uds_is_sparse_index_geometry(geometry)) in uds_make_volume()
1570 reserved_buffers += (config->cache_chapters * geometry->index_pages_per_chapter); in uds_make_volume()
1572 result = uds_open_volume_bufio(layout, geometry->bytes_per_page, in uds_make_volume()
1579 result = uds_make_radix_sorter(geometry->records_per_page, in uds_make_volume()
1586 result = vdo_allocate(geometry->records_per_page, in uds_make_volume()
1594 if (uds_is_sparse_index_geometry(geometry)) { in uds_make_volume()
1595 size_t page_size = sizeof(struct delta_index_page) + geometry->bytes_per_page; in uds_make_volume()
1597 result = uds_make_sparse_cache(geometry, config->cache_chapters, in uds_make_volume()
1606 page_size * geometry->index_pages_per_chapter * config->cache_chapters; in uds_make_volume()
1609 result = initialize_page_cache(&volume->page_cache, geometry, in uds_make_volume()
1617 result = uds_make_index_page_map(geometry, &volume->index_page_map); in uds_make_volume()
1690 vdo_free(volume->geometry); in uds_free_volume()