Lines Matching refs:ref

165 static void free_pref(struct prelim_ref *ref)  in free_pref()  argument
167 kmem_cache_free(btrfs_prelim_ref_cache, ref); in free_pref()
231 struct prelim_ref *ref; in prelim_ref_insert() local
240 ref = rb_entry(parent, struct prelim_ref, rbnode); in prelim_ref_insert()
241 result = prelim_ref_compare(ref, newref); in prelim_ref_insert()
249 struct extent_inode_elem *eie = ref->inode_list; in prelim_ref_insert()
255 ref->inode_list = newref->inode_list; in prelim_ref_insert()
258 trace_btrfs_prelim_ref_merge(fs_info, ref, newref, in prelim_ref_insert()
265 update_share_count(sc, ref->count, in prelim_ref_insert()
266 ref->count + newref->count); in prelim_ref_insert()
267 ref->count += newref->count; in prelim_ref_insert()
286 struct prelim_ref *ref, *next_ref; in prelim_release() local
288 rbtree_postorder_for_each_entry_safe(ref, next_ref, in prelim_release()
290 free_pref(ref); in prelim_release()
340 struct prelim_ref *ref; in add_prelim_ref() local
345 ref = kmem_cache_alloc(btrfs_prelim_ref_cache, gfp_mask); in add_prelim_ref()
346 if (!ref) in add_prelim_ref()
349 ref->root_id = root_id; in add_prelim_ref()
351 ref->key_for_search = *key; in add_prelim_ref()
371 if (ref->key_for_search.type == BTRFS_EXTENT_DATA_KEY && in add_prelim_ref()
372 ref->key_for_search.offset >= LLONG_MAX) in add_prelim_ref()
373 ref->key_for_search.offset = 0; in add_prelim_ref()
375 memset(&ref->key_for_search, 0, sizeof(ref->key_for_search)); in add_prelim_ref()
378 ref->inode_list = NULL; in add_prelim_ref()
379 ref->level = level; in add_prelim_ref()
380 ref->count = count; in add_prelim_ref()
381 ref->parent = parent; in add_prelim_ref()
382 ref->wanted_disk_byte = wanted_disk_byte; in add_prelim_ref()
383 prelim_ref_insert(fs_info, preftree, ref, sc); in add_prelim_ref()
413 struct ulist *parents, struct prelim_ref *ref, in add_all_parents() argument
421 struct btrfs_key *key_for_search = &ref->key_for_search; in add_all_parents()
425 u64 wanted_disk_byte = ref->wanted_disk_byte; in add_all_parents()
505 struct prelim_ref *ref, struct ulist *parents, in resolve_indirect_ref() argument
514 int level = ref->level; in resolve_indirect_ref()
517 root_key.objectid = ref->root_id; in resolve_indirect_ref()
550 ret = btrfs_search_slot(NULL, root, &ref->key_for_search, path, in resolve_indirect_ref()
553 ret = btrfs_search_old_slot(root, &ref->key_for_search, path, in resolve_indirect_ref()
561 ref->root_id, level, ref->count, ret, in resolve_indirect_ref()
562 ref->key_for_search.objectid, ref->key_for_search.type, in resolve_indirect_ref()
563 ref->key_for_search.offset); in resolve_indirect_ref()
577 ret = add_all_parents(root, path, parents, ref, level, time_seq, in resolve_indirect_ref()
633 struct prelim_ref *ref; in resolve_indirect_refs() local
635 ref = rb_entry(rnode, struct prelim_ref, rbnode); in resolve_indirect_refs()
636 if (WARN(ref->parent, in resolve_indirect_refs()
642 rb_erase_cached(&ref->rbnode, &preftrees->indirect.root); in resolve_indirect_refs()
645 if (ref->count == 0) { in resolve_indirect_refs()
646 free_pref(ref); in resolve_indirect_refs()
651 ref->root_id != sc->root_objectid) { in resolve_indirect_refs()
652 free_pref(ref); in resolve_indirect_refs()
656 err = resolve_indirect_ref(fs_info, path, time_seq, ref, in resolve_indirect_refs()
664 prelim_ref_insert(fs_info, &preftrees->direct, ref, in resolve_indirect_refs()
668 free_pref(ref); in resolve_indirect_refs()
676 ref->parent = node ? node->val : 0; in resolve_indirect_refs()
677 ref->inode_list = unode_aux_to_inode_list(node); in resolve_indirect_refs()
686 free_pref(ref); in resolve_indirect_refs()
690 memcpy(new_ref, ref, sizeof(*ref)); in resolve_indirect_refs()
701 prelim_ref_insert(fs_info, &preftrees->direct, ref, NULL); in resolve_indirect_refs()
717 struct prelim_ref *ref; in add_missing_keys() local
723 ref = rb_entry(node, struct prelim_ref, rbnode); in add_missing_keys()
726 BUG_ON(ref->parent); /* should not be a direct ref */ in add_missing_keys()
727 BUG_ON(ref->key_for_search.type); in add_missing_keys()
728 BUG_ON(!ref->wanted_disk_byte); in add_missing_keys()
730 eb = read_tree_block(fs_info, ref->wanted_disk_byte, 0, in add_missing_keys()
731 ref->level - 1, NULL); in add_missing_keys()
733 free_pref(ref); in add_missing_keys()
736 free_pref(ref); in add_missing_keys()
743 btrfs_item_key_to_cpu(eb, &ref->key_for_search, 0); in add_missing_keys()
745 btrfs_node_key_to_cpu(eb, &ref->key_for_search, 0); in add_missing_keys()
749 prelim_ref_insert(fs_info, &preftrees->indirect, ref, NULL); in add_missing_keys()
800 struct btrfs_delayed_tree_ref *ref; in add_delayed_refs() local
802 ref = btrfs_delayed_node_to_tree_ref(node); in add_delayed_refs()
803 ret = add_indirect_ref(fs_info, preftrees, ref->root, in add_delayed_refs()
804 &tmp_op_key, ref->level + 1, in add_delayed_refs()
811 struct btrfs_delayed_tree_ref *ref; in add_delayed_refs() local
813 ref = btrfs_delayed_node_to_tree_ref(node); in add_delayed_refs()
815 ret = add_direct_ref(fs_info, preftrees, ref->level + 1, in add_delayed_refs()
816 ref->parent, node->bytenr, count, in add_delayed_refs()
822 struct btrfs_delayed_data_ref *ref; in add_delayed_refs() local
823 ref = btrfs_delayed_node_to_data_ref(node); in add_delayed_refs()
825 key.objectid = ref->objectid; in add_delayed_refs()
827 key.offset = ref->offset; in add_delayed_refs()
833 if (sc && sc->inum && ref->objectid != sc->inum) { in add_delayed_refs()
838 ret = add_indirect_ref(fs_info, preftrees, ref->root, in add_delayed_refs()
845 struct btrfs_delayed_data_ref *ref; in add_delayed_refs() local
847 ref = btrfs_delayed_node_to_data_ref(node); in add_delayed_refs()
849 ret = add_direct_ref(fs_info, preftrees, 0, ref->parent, in add_delayed_refs()
1125 struct prelim_ref *ref; local
1254 ref = rb_entry(node, struct prelim_ref, rbnode);
1255 node = rb_next(&ref->rbnode);
1266 if (roots && ref->count && ref->root_id && ref->parent == 0) {
1268 ref->root_id != sc->root_objectid) {
1274 ret = ulist_add(roots, ref->root_id, 0, GFP_NOFS);
1278 if (ref->count && ref->parent) {
1279 if (extent_item_pos && !ref->inode_list &&
1280 ref->level == 0) {
1283 eb = read_tree_block(fs_info, ref->parent, 0,
1284 ref->level, NULL);
1305 ref->inode_list = eie;
1307 ret = ulist_add_merge_ptr(refs, ref->parent,
1308 ref->inode_list,
1320 eie->next = ref->inode_list;