Lines Matching refs:chapter
217 static int __must_check initialize_cached_chapter_index(struct cached_chapter_index *chapter, in initialize_cached_chapter_index() argument
222 chapter->virtual_chapter = NO_CHAPTER; in initialize_cached_chapter_index()
223 chapter->index_pages_count = geometry->index_pages_per_chapter; in initialize_cached_chapter_index()
225 result = vdo_allocate(chapter->index_pages_count, struct delta_index_page, in initialize_cached_chapter_index()
226 __func__, &chapter->index_pages); in initialize_cached_chapter_index()
230 return vdo_allocate(chapter->index_pages_count, struct dm_buffer *, in initialize_cached_chapter_index()
231 "sparse index volume pages", &chapter->page_buffers); in initialize_cached_chapter_index()
309 static inline void set_skip_search(struct cached_chapter_index *chapter, in set_skip_search() argument
313 if (READ_ONCE(chapter->skip_search) != skip_search) in set_skip_search()
314 WRITE_ONCE(chapter->skip_search, skip_search); in set_skip_search()
317 static void score_search_hit(struct cached_chapter_index *chapter) in score_search_hit() argument
319 chapter->counters.consecutive_misses = 0; in score_search_hit()
320 set_skip_search(chapter, false); in score_search_hit()
324 struct cached_chapter_index *chapter) in score_search_miss() argument
326 chapter->counters.consecutive_misses++; in score_search_miss()
327 if (chapter->counters.consecutive_misses > cache->skip_threshold) in score_search_miss()
328 set_skip_search(chapter, true); in score_search_miss()
331 static void release_cached_chapter_index(struct cached_chapter_index *chapter) in release_cached_chapter_index() argument
335 chapter->virtual_chapter = NO_CHAPTER; in release_cached_chapter_index()
336 if (chapter->page_buffers == NULL) in release_cached_chapter_index()
339 for (i = 0; i < chapter->index_pages_count; i++) { in release_cached_chapter_index()
340 if (chapter->page_buffers[i] != NULL) in release_cached_chapter_index()
341 dm_bufio_release(vdo_forget(chapter->page_buffers[i])); in release_cached_chapter_index()
393 struct cached_chapter_index *chapter; in uds_sparse_cache_contains() local
405 chapter = search_list->entries[i]; in uds_sparse_cache_contains()
407 if (virtual_chapter == chapter->virtual_chapter) { in uds_sparse_cache_contains()
409 score_search_hit(chapter); in uds_sparse_cache_contains()
430 struct cached_chapter_index *chapter; in purge_search_list() local
441 chapter = search_list->entries[i]; in purge_search_list()
442 if ((chapter->virtual_chapter < oldest_virtual_chapter) || in purge_search_list()
443 (chapter->virtual_chapter == NO_CHAPTER)) in purge_search_list()
444 dead[next_dead++] = chapter; in purge_search_list()
445 else if (chapter->skip_search) in purge_search_list()
446 skipped[next_skipped++] = chapter; in purge_search_list()
448 entries[next_alive++] = chapter; in purge_search_list()
458 static int __must_check cache_chapter_index(struct cached_chapter_index *chapter, in cache_chapter_index() argument
464 release_cached_chapter_index(chapter); in cache_chapter_index()
467 chapter->page_buffers, in cache_chapter_index()
468 chapter->index_pages); in cache_chapter_index()
472 chapter->counters.consecutive_misses = 0; in cache_chapter_index()
473 chapter->virtual_chapter = virtual_chapter; in cache_chapter_index()
474 chapter->skip_search = false; in cache_chapter_index()
545 static inline bool should_skip_chapter(struct cached_chapter_index *chapter, in should_skip_chapter() argument
548 if ((chapter->virtual_chapter == NO_CHAPTER) || in should_skip_chapter()
549 (chapter->virtual_chapter < oldest_chapter)) in should_skip_chapter()
553 return requested_chapter != chapter->virtual_chapter; in should_skip_chapter()
555 return READ_ONCE(chapter->skip_search); in should_skip_chapter()
558 static int __must_check search_cached_chapter_index(struct cached_chapter_index *chapter, in search_cached_chapter_index() argument
565 uds_map_to_physical_chapter(geometry, chapter->virtual_chapter); in search_cached_chapter_index()
569 &chapter->index_pages[index_page_number]; in search_cached_chapter_index()
581 struct cached_chapter_index *chapter; in uds_search_sparse_cache() local
590 chapter = search_list->entries[i]; in uds_search_sparse_cache()
592 if (should_skip_chapter(chapter, zone->oldest_virtual_chapter, in uds_search_sparse_cache()
596 result = search_cached_chapter_index(chapter, cache->geometry, in uds_search_sparse_cache()
610 score_search_hit(chapter); in uds_search_sparse_cache()
612 *virtual_chapter_ptr = chapter->virtual_chapter; in uds_search_sparse_cache()
617 score_search_miss(cache, chapter); in uds_search_sparse_cache()