• Home
  • Raw
  • Download

Lines Matching refs:cache

1551 static bool lookup_backref_shared_cache(struct btrfs_backref_shared_cache *cache,  in lookup_backref_shared_cache()  argument
1557 if (!cache->use_cache) in lookup_backref_shared_cache()
1571 entry = &cache->entries[level]; in lookup_backref_shared_cache()
1604 cache->entries[i].is_shared = true; in lookup_backref_shared_cache()
1605 cache->entries[i].gen = entry->gen; in lookup_backref_shared_cache()
1617 static void store_backref_shared_cache(struct btrfs_backref_shared_cache *cache, in store_backref_shared_cache() argument
1624 if (!cache->use_cache) in store_backref_shared_cache()
1643 entry = &cache->entries[level]; in store_backref_shared_cache()
1657 entry = &cache->entries[i]; in store_backref_shared_cache()
1690 struct btrfs_backref_shared_cache *cache) in btrfs_is_data_extent_shared() argument
1724 cache->use_cache = true; in btrfs_is_data_extent_shared()
1735 store_backref_shared_cache(cache, root, bytenr, in btrfs_is_data_extent_shared()
1770 cache->use_cache = false; in btrfs_is_data_extent_shared()
1773 store_backref_shared_cache(cache, root, bytenr, in btrfs_is_data_extent_shared()
1780 cached = lookup_backref_shared_cache(cache, root, bytenr, level, in btrfs_is_data_extent_shared()
2707 struct btrfs_backref_cache *cache, int is_reloc) in btrfs_backref_init_cache() argument
2711 cache->rb_root = RB_ROOT; in btrfs_backref_init_cache()
2713 INIT_LIST_HEAD(&cache->pending[i]); in btrfs_backref_init_cache()
2714 INIT_LIST_HEAD(&cache->changed); in btrfs_backref_init_cache()
2715 INIT_LIST_HEAD(&cache->detached); in btrfs_backref_init_cache()
2716 INIT_LIST_HEAD(&cache->leaves); in btrfs_backref_init_cache()
2717 INIT_LIST_HEAD(&cache->pending_edge); in btrfs_backref_init_cache()
2718 INIT_LIST_HEAD(&cache->useless_node); in btrfs_backref_init_cache()
2719 cache->fs_info = fs_info; in btrfs_backref_init_cache()
2720 cache->is_reloc = is_reloc; in btrfs_backref_init_cache()
2724 struct btrfs_backref_cache *cache, u64 bytenr, int level) in btrfs_backref_alloc_node() argument
2737 cache->nr_nodes++; in btrfs_backref_alloc_node()
2745 struct btrfs_backref_cache *cache) in btrfs_backref_alloc_edge() argument
2751 cache->nr_edges++; in btrfs_backref_alloc_edge()
2762 void btrfs_backref_cleanup_node(struct btrfs_backref_cache *cache, in btrfs_backref_cleanup_node() argument
2778 btrfs_backref_free_edge(cache, edge); in btrfs_backref_cleanup_node()
2785 list_add_tail(&upper->lower, &cache->leaves); in btrfs_backref_cleanup_node()
2790 btrfs_backref_drop_node(cache, node); in btrfs_backref_cleanup_node()
2796 void btrfs_backref_release_cache(struct btrfs_backref_cache *cache) in btrfs_backref_release_cache() argument
2801 while (!list_empty(&cache->detached)) { in btrfs_backref_release_cache()
2802 node = list_entry(cache->detached.next, in btrfs_backref_release_cache()
2804 btrfs_backref_cleanup_node(cache, node); in btrfs_backref_release_cache()
2807 while (!list_empty(&cache->leaves)) { in btrfs_backref_release_cache()
2808 node = list_entry(cache->leaves.next, in btrfs_backref_release_cache()
2810 btrfs_backref_cleanup_node(cache, node); in btrfs_backref_release_cache()
2813 cache->last_trans = 0; in btrfs_backref_release_cache()
2816 ASSERT(list_empty(&cache->pending[i])); in btrfs_backref_release_cache()
2817 ASSERT(list_empty(&cache->pending_edge)); in btrfs_backref_release_cache()
2818 ASSERT(list_empty(&cache->useless_node)); in btrfs_backref_release_cache()
2819 ASSERT(list_empty(&cache->changed)); in btrfs_backref_release_cache()
2820 ASSERT(list_empty(&cache->detached)); in btrfs_backref_release_cache()
2821 ASSERT(RB_EMPTY_ROOT(&cache->rb_root)); in btrfs_backref_release_cache()
2822 ASSERT(!cache->nr_nodes); in btrfs_backref_release_cache()
2823 ASSERT(!cache->nr_edges); in btrfs_backref_release_cache()
2838 static int handle_direct_tree_backref(struct btrfs_backref_cache *cache, in handle_direct_tree_backref() argument
2854 if (cache->is_reloc) { in handle_direct_tree_backref()
2855 root = find_reloc_root(cache->fs_info, cur->bytenr); in handle_direct_tree_backref()
2864 list_add(&cur->list, &cache->useless_node); in handle_direct_tree_backref()
2869 edge = btrfs_backref_alloc_edge(cache); in handle_direct_tree_backref()
2873 rb_node = rb_simple_search(&cache->rb_root, ref_key->offset); in handle_direct_tree_backref()
2876 upper = btrfs_backref_alloc_node(cache, ref_key->offset, in handle_direct_tree_backref()
2879 btrfs_backref_free_edge(cache, edge); in handle_direct_tree_backref()
2887 list_add_tail(&edge->list[UPPER], &cache->pending_edge); in handle_direct_tree_backref()
2910 static int handle_indirect_tree_backref(struct btrfs_backref_cache *cache, in handle_indirect_tree_backref() argument
2916 struct btrfs_fs_info *fs_info = cache->fs_info; in handle_indirect_tree_backref()
2946 if (btrfs_should_ignore_reloc_root(root) && cache->is_reloc) { in handle_indirect_tree_backref()
2948 list_add(&cur->list, &cache->useless_node); in handle_indirect_tree_backref()
2989 cache->is_reloc) { in handle_indirect_tree_backref()
2991 list_add(&lower->list, &cache->useless_node); in handle_indirect_tree_backref()
2998 edge = btrfs_backref_alloc_edge(cache); in handle_indirect_tree_backref()
3006 rb_node = rb_simple_search(&cache->rb_root, eb->start); in handle_indirect_tree_backref()
3008 upper = btrfs_backref_alloc_node(cache, eb->start, in handle_indirect_tree_backref()
3012 btrfs_backref_free_edge(cache, edge); in handle_indirect_tree_backref()
3037 &cache->pending_edge); in handle_indirect_tree_backref()
3076 int btrfs_backref_add_tree_node(struct btrfs_backref_cache *cache, in btrfs_backref_add_tree_node() argument
3082 struct btrfs_fs_info *fs_info = cache->fs_info; in btrfs_backref_add_tree_node()
3120 list_add_tail(&edge->list[UPPER], &cache->pending_edge); in btrfs_backref_add_tree_node()
3168 ret = handle_direct_tree_backref(cache, &key, cur); in btrfs_backref_add_tree_node()
3186 ret = handle_indirect_tree_backref(cache, path, &key, node_key, in btrfs_backref_add_tree_node()
3202 int btrfs_backref_finish_upper_links(struct btrfs_backref_cache *cache, in btrfs_backref_finish_upper_links() argument
3205 struct list_head *useless_node = &cache->useless_node; in btrfs_backref_finish_upper_links()
3214 rb_node = rb_simple_insert(&cache->rb_root, start->bytenr, in btrfs_backref_finish_upper_links()
3217 btrfs_backref_panic(cache->fs_info, start->bytenr, in btrfs_backref_finish_upper_links()
3219 list_add_tail(&start->lower, &cache->leaves); in btrfs_backref_finish_upper_links()
3243 btrfs_backref_free_edge(cache, edge); in btrfs_backref_finish_upper_links()
3282 rb_node = rb_simple_insert(&cache->rb_root, upper->bytenr, in btrfs_backref_finish_upper_links()
3285 btrfs_backref_panic(cache->fs_info, in btrfs_backref_finish_upper_links()
3303 void btrfs_backref_error_cleanup(struct btrfs_backref_cache *cache, in btrfs_backref_error_cleanup() argument
3310 while (!list_empty(&cache->useless_node)) { in btrfs_backref_error_cleanup()
3311 lower = list_first_entry(&cache->useless_node, in btrfs_backref_error_cleanup()
3315 while (!list_empty(&cache->pending_edge)) { in btrfs_backref_error_cleanup()
3316 edge = list_first_entry(&cache->pending_edge, in btrfs_backref_error_cleanup()
3322 btrfs_backref_free_edge(cache, edge); in btrfs_backref_error_cleanup()
3330 list_add(&lower->list, &cache->useless_node); in btrfs_backref_error_cleanup()
3338 &cache->pending_edge); in btrfs_backref_error_cleanup()
3340 list_add(&upper->list, &cache->useless_node); in btrfs_backref_error_cleanup()
3343 while (!list_empty(&cache->useless_node)) { in btrfs_backref_error_cleanup()
3344 lower = list_first_entry(&cache->useless_node, in btrfs_backref_error_cleanup()
3349 btrfs_backref_drop_node(cache, lower); in btrfs_backref_error_cleanup()
3352 btrfs_backref_cleanup_node(cache, node); in btrfs_backref_error_cleanup()
3353 ASSERT(list_empty(&cache->useless_node) && in btrfs_backref_error_cleanup()
3354 list_empty(&cache->pending_edge)); in btrfs_backref_error_cleanup()