Lines Matching refs:ref
212 static void free_pref(struct prelim_ref *ref) in free_pref() argument
214 kmem_cache_free(btrfs_prelim_ref_cache, ref); in free_pref()
301 struct prelim_ref *ref = rb_entry(exist, struct prelim_ref, rbnode); in prelim_ref_insert() local
303 struct extent_inode_elem *eie = ref->inode_list; in prelim_ref_insert()
309 ref->inode_list = newref->inode_list; in prelim_ref_insert()
312 trace_btrfs_prelim_ref_merge(fs_info, ref, newref, in prelim_ref_insert()
319 update_share_count(sc, ref->count, in prelim_ref_insert()
320 ref->count + newref->count, newref); in prelim_ref_insert()
321 ref->count += newref->count; in prelim_ref_insert()
337 struct prelim_ref *ref, *next_ref; in prelim_release() local
339 rbtree_postorder_for_each_entry_safe(ref, next_ref, in prelim_release()
341 free_inode_elem_list(ref->inode_list); in prelim_release()
342 free_pref(ref); in prelim_release()
393 struct prelim_ref *ref; in add_prelim_ref() local
398 ref = kmem_cache_alloc(btrfs_prelim_ref_cache, gfp_mask); in add_prelim_ref()
399 if (!ref) in add_prelim_ref()
402 ref->root_id = root_id; in add_prelim_ref()
404 ref->key_for_search = *key; in add_prelim_ref()
406 memset(&ref->key_for_search, 0, sizeof(ref->key_for_search)); in add_prelim_ref()
408 ref->inode_list = NULL; in add_prelim_ref()
409 ref->level = level; in add_prelim_ref()
410 ref->count = count; in add_prelim_ref()
411 ref->parent = parent; in add_prelim_ref()
412 ref->wanted_disk_byte = wanted_disk_byte; in add_prelim_ref()
413 prelim_ref_insert(fs_info, preftree, ref, sc); in add_prelim_ref()
446 struct prelim_ref *ref = NULL; in is_shared_data_backref() local
454 ref = rb_entry(parent, struct prelim_ref, rbnode); in is_shared_data_backref()
455 result = prelim_ref_compare(ref, &target); in is_shared_data_backref()
470 struct preftrees *preftrees, struct prelim_ref *ref, in add_all_parents() argument
477 struct btrfs_key *key_for_search = &ref->key_for_search; in add_all_parents()
481 u64 wanted_disk_byte = ref->wanted_disk_byte; in add_all_parents()
507 ref->root_id != btrfs_header_owner(eb)) { in add_all_parents()
514 while (!ret && count < ref->count) { in add_all_parents()
531 ref->root_id != btrfs_header_owner(eb))) { in add_all_parents()
548 if (ref->key_for_search.offset == key.offset - data_offset) in add_all_parents()
593 struct prelim_ref *ref, struct ulist *parents) in resolve_indirect_ref() argument
599 int level = ref->level; in resolve_indirect_ref()
600 struct btrfs_key search_key = ref->key_for_search; in resolve_indirect_ref()
611 root = btrfs_get_fs_root_commit_root(ctx->fs_info, path, ref->root_id); in resolve_indirect_ref()
613 root = btrfs_get_fs_root(ctx->fs_info, ref->root_id, false); in resolve_indirect_ref()
670 ref->root_id, level, ref->count, ret, in resolve_indirect_ref()
671 ref->key_for_search.objectid, ref->key_for_search.type, in resolve_indirect_ref()
672 ref->key_for_search.offset); in resolve_indirect_ref()
686 ret = add_all_parents(ctx, root, path, parents, preftrees, ref, level); in resolve_indirect_ref()
753 struct prelim_ref *ref; in resolve_indirect_refs() local
756 ref = rb_entry(rnode, struct prelim_ref, rbnode); in resolve_indirect_refs()
757 if (WARN(ref->parent, in resolve_indirect_refs()
763 rb_erase_cached(&ref->rbnode, &preftrees->indirect.root); in resolve_indirect_refs()
766 if (ref->count == 0) { in resolve_indirect_refs()
767 free_pref(ref); in resolve_indirect_refs()
771 if (sc && ref->root_id != btrfs_root_id(sc->root)) { in resolve_indirect_refs()
772 free_pref(ref); in resolve_indirect_refs()
776 ret2 = resolve_indirect_ref(ctx, path, preftrees, ref, parents); in resolve_indirect_refs()
782 prelim_ref_insert(ctx->fs_info, &preftrees->direct, ref, in resolve_indirect_refs()
786 free_pref(ref); in resolve_indirect_refs()
794 ref->parent = node ? node->val : 0; in resolve_indirect_refs()
795 ref->inode_list = unode_aux_to_inode_list(node); in resolve_indirect_refs()
804 free_pref(ref); in resolve_indirect_refs()
808 memcpy(new_ref, ref, sizeof(*ref)); in resolve_indirect_refs()
819 prelim_ref_insert(ctx->fs_info, &preftrees->direct, ref, NULL); in resolve_indirect_refs()
839 struct prelim_ref *ref; in add_missing_keys() local
847 ref = rb_entry(node, struct prelim_ref, rbnode); in add_missing_keys()
850 BUG_ON(ref->parent); /* should not be a direct ref */ in add_missing_keys()
851 BUG_ON(ref->key_for_search.type); in add_missing_keys()
852 BUG_ON(!ref->wanted_disk_byte); in add_missing_keys()
854 check.level = ref->level - 1; in add_missing_keys()
855 check.owner_root = ref->root_id; in add_missing_keys()
857 eb = read_tree_block(fs_info, ref->wanted_disk_byte, &check); in add_missing_keys()
859 free_pref(ref); in add_missing_keys()
863 free_pref(ref); in add_missing_keys()
871 btrfs_item_key_to_cpu(eb, &ref->key_for_search, 0); in add_missing_keys()
873 btrfs_node_key_to_cpu(eb, &ref->key_for_search, 0); in add_missing_keys()
877 prelim_ref_insert(fs_info, &preftrees->indirect, ref, NULL); in add_missing_keys()
1388 struct prelim_ref *ref; in find_parent_nodes() local
1585 ref = rb_entry(node, struct prelim_ref, rbnode); in find_parent_nodes()
1586 node = rb_next(&ref->rbnode); in find_parent_nodes()
1597 if (ctx->roots && ref->count && ref->root_id && ref->parent == 0) { in find_parent_nodes()
1599 ret = ulist_add(ctx->roots, ref->root_id, 0, GFP_NOFS); in find_parent_nodes()
1603 if (ref->count && ref->parent) { in find_parent_nodes()
1604 if (!ctx->skip_inode_ref_list && !ref->inode_list && in find_parent_nodes()
1605 ref->level == 0) { in find_parent_nodes()
1609 check.level = ref->level; in find_parent_nodes()
1611 eb = read_tree_block(ctx->fs_info, ref->parent, in find_parent_nodes()
1632 ref->inode_list = eie; in find_parent_nodes()
1640 ret = ulist_add_merge_ptr(ctx->refs, ref->parent, in find_parent_nodes()
1641 ref->inode_list, in find_parent_nodes()
1661 eie->next = ref->inode_list; in find_parent_nodes()
1671 ref->inode_list = NULL; in find_parent_nodes()