Lines Matching +full:1 +full:eb
37 const struct extent_buffer *eb, in check_extent_in_eb() argument
41 const u64 data_len = btrfs_file_extent_num_bytes(eb, fi); in check_extent_in_eb()
49 !btrfs_file_extent_compression(eb, fi) && in check_extent_in_eb()
50 !btrfs_file_extent_encryption(eb, fi) && in check_extent_in_eb()
51 !btrfs_file_extent_other_encoding(eb, fi)) { in check_extent_in_eb()
54 data_offset = btrfs_file_extent_offset(eb, fi); in check_extent_in_eb()
58 return 1; in check_extent_in_eb()
65 cached = ctx->cache_lookup(eb->start, ctx->user_ctx, &root_ids, in check_extent_in_eb()
105 const struct extent_buffer *eb, in find_extent_in_eb() argument
121 nritems = btrfs_header_nritems(eb); in find_extent_in_eb()
123 btrfs_item_key_to_cpu(eb, &key, slot); in find_extent_in_eb()
126 fi = btrfs_item_ptr(eb, slot, struct btrfs_file_extent_item); in find_extent_in_eb()
127 extent_type = btrfs_file_extent_type(eb, fi); in find_extent_in_eb()
131 disk_byte = btrfs_file_extent_disk_bytenr(eb, fi); in find_extent_in_eb()
135 ret = check_extent_in_eb(ctx, &key, eb, fi, eie); in find_extent_in_eb()
162 * - decremented when a ref->count transitions to <1
173 * check typically stops once this counter gets greater than 1, so it
183 * than 1, then we know for sure the inode has multiple file extent
193 return (sc && sc->share_count > 1) ? BACKREF_FOUND_SHARED : 0; in extent_is_shared()
222 * A -1 return indicates ref1 is a 'lower' block than ref2, while 1
229 return -1; in prelim_ref_compare()
231 return 1; in prelim_ref_compare()
233 return -1; in prelim_ref_compare()
235 return 1; in prelim_ref_compare()
237 return -1; in prelim_ref_compare()
239 return 1; in prelim_ref_compare()
241 return -1; in prelim_ref_compare()
243 return 1; in prelim_ref_compare()
245 return -1; in prelim_ref_compare()
247 return 1; in prelim_ref_compare()
249 return -1; in prelim_ref_compare()
251 return 1; in prelim_ref_compare()
259 if ((!sc) || (oldcount == 0 && newcount < 1)) in update_share_count()
262 if (oldcount > 0 && newcount < 1) in update_share_count()
264 else if (oldcount < 1 && newcount > 0) in update_share_count()
370 * - column 1: we've the parent -> done
383 * - column 1, 3: we've the parent -> done
466 return 1; in is_shared_data_backref()
479 struct extent_buffer *eb; in add_all_parents() local
491 eb = path->nodes[level]; in add_all_parents()
492 ret = ulist_add(parents, eb->start, 0, GFP_NOFS); in add_all_parents()
499 * 1. We normally enter this function with the path already pointing to in add_all_parents()
508 eb = path->nodes[0]; in add_all_parents()
509 if (path->slots[0] >= btrfs_header_nritems(eb) || in add_all_parents()
510 is_shared_data_backref(preftrees, eb->start) || in add_all_parents()
511 ref->root_id != btrfs_header_owner(eb)) { in add_all_parents()
519 eb = path->nodes[0]; in add_all_parents()
522 btrfs_item_key_to_cpu(eb, &key, slot); in add_all_parents()
534 (is_shared_data_backref(preftrees, eb->start) || in add_all_parents()
535 ref->root_id != btrfs_header_owner(eb))) { in add_all_parents()
542 fi = btrfs_item_ptr(eb, slot, struct btrfs_file_extent_item); in add_all_parents()
543 type = btrfs_file_extent_type(eb, fi); in add_all_parents()
546 disk_byte = btrfs_file_extent_disk_bytenr(eb, fi); in add_all_parents()
547 data_offset = btrfs_file_extent_offset(eb, fi); in add_all_parents()
557 ret = check_extent_in_eb(ctx, &key, eb, fi, &eie); in add_all_parents()
564 ret = ulist_add_merge_ptr(parents, eb->start, in add_all_parents()
600 struct extent_buffer *eb; in resolve_indirect_ref() local
641 if (root_level + 1 == level) in resolve_indirect_ref()
680 eb = path->nodes[level]; in resolve_indirect_ref()
681 while (!eb) { in resolve_indirect_ref()
683 ret = 1; in resolve_indirect_ref()
687 eb = path->nodes[level]; in resolve_indirect_ref()
844 struct extent_buffer *eb; in add_missing_keys() local
858 check.level = ref->level - 1; in add_missing_keys()
861 eb = read_tree_block(fs_info, ref->wanted_disk_byte, &check); in add_missing_keys()
862 if (IS_ERR(eb)) { in add_missing_keys()
864 return PTR_ERR(eb); in add_missing_keys()
866 if (!extent_buffer_uptodate(eb)) { in add_missing_keys()
868 free_extent_buffer(eb); in add_missing_keys()
873 btrfs_tree_read_lock(eb); in add_missing_keys()
874 if (btrfs_header_level(eb) == 0) in add_missing_keys()
875 btrfs_item_key_to_cpu(eb, &ref->key_for_search, 0); in add_missing_keys()
877 btrfs_node_key_to_cpu(eb, &ref->key_for_search, 0); in add_missing_keys()
879 btrfs_tree_read_unlock(eb); in add_missing_keys()
880 free_extent_buffer(eb); in add_missing_keys()
911 WARN_ON(1); in add_delayed_refs()
917 count = node->ref_mod * -1; in add_delayed_refs()
935 key_ptr, ref->level + 1, in add_delayed_refs()
946 ret = add_direct_ref(fs_info, preftrees, ref->level + 1, in add_delayed_refs()
995 WARN_ON(1); in add_delayed_refs()
1052 ptr = (unsigned long)(ei + 1); in add_inline_refs()
1085 *info_level + 1, offset, in add_inline_refs()
1086 ctx->bytenr, 1, NULL, GFP_NOFS); in add_inline_refs()
1092 sdref = (struct btrfs_shared_data_ref *)(iref + 1); in add_inline_refs()
1101 NULL, *info_level + 1, in add_inline_refs()
1102 ctx->bytenr, 1, NULL, GFP_NOFS); in add_inline_refs()
1133 WARN_ON(1); in add_inline_refs()
1160 while (1) { in add_keyed_refs()
1184 info_level + 1, key.offset, in add_keyed_refs()
1185 ctx->bytenr, 1, NULL, GFP_NOFS); in add_keyed_refs()
1203 NULL, info_level + 1, ctx->bytenr, in add_keyed_refs()
1204 1, NULL, GFP_NOFS); in add_keyed_refs()
1237 WARN_ON(1); in add_keyed_refs()
1269 * Level -1 is used for the data extent, which is not reliable to cache in lookup_backref_shared_cache()
1340 * Level -1 is used for the data extent, which is not reliable to cache in store_backref_shared_cache()
1411 key.offset = (u64)-1; in find_parent_nodes()
1421 path->search_commit_root = 1; in find_parent_nodes()
1422 path->skip_locking = 1; in find_parent_nodes()
1426 path->skip_locking = 1; in find_parent_nodes()
1551 sc->self_ref_count == 1) { in find_parent_nodes()
1613 struct extent_buffer *eb; in find_parent_nodes() local
1617 eb = read_tree_block(ctx->fs_info, ref->parent, in find_parent_nodes()
1619 if (IS_ERR(eb)) { in find_parent_nodes()
1620 ret = PTR_ERR(eb); in find_parent_nodes()
1623 if (!extent_buffer_uptodate(eb)) { in find_parent_nodes()
1624 free_extent_buffer(eb); in find_parent_nodes()
1630 btrfs_tree_read_lock(eb); in find_parent_nodes()
1631 ret = find_extent_in_eb(ctx, eb, &eie); in find_parent_nodes()
1633 btrfs_tree_read_unlock(eb); in find_parent_nodes()
1634 free_extent_buffer(eb); in find_parent_nodes()
1771 while (1) { in btrfs_find_all_roots_safe()
1851 * Return: 0 if extent is not shared, 1 if it is shared, < 0 on error.
1912 ret = 1; in btrfs_is_data_extent_shared()
1921 /* -1 means we are in the bytenr of the data extent. */ in btrfs_is_data_extent_shared()
1922 level = -1; in btrfs_is_data_extent_shared()
1924 while (1) { in btrfs_is_data_extent_shared()
1931 /* If shared must return 1, otherwise return 0. */ in btrfs_is_data_extent_shared()
1932 ret = (ret == BACKREF_FOUND_SHARED) ? 1 : 0; in btrfs_is_data_extent_shared()
1935 level, ret == 1); in btrfs_is_data_extent_shared()
1949 * 1) level -1, the data extent: If our data extent was not in btrfs_is_data_extent_shared()
1951 * it might have a single reference item with a count > 1 for in btrfs_is_data_extent_shared()
1972 if ((ctx->refs.nnodes - prev_ref_count) > 1) in btrfs_is_data_extent_shared()
1990 ret = (is_shared ? 1 : 0); in btrfs_is_data_extent_shared()
2014 i = level + 1; in btrfs_is_data_extent_shared()
2023 * has more than 1 file extent item that refers to the data extent. in btrfs_is_data_extent_shared()
2025 if (ret >= 0 && shared.self_ref_count > 1) { in btrfs_is_data_extent_shared()
2029 ctx->prev_extents_cache[slot].is_shared = (ret == 1); in btrfs_is_data_extent_shared()
2031 slot = (slot + 1) % BTRFS_BACKREF_CTX_PREV_EXTENTS_SIZE; in btrfs_is_data_extent_shared()
2069 while (1) { in btrfs_find_one_extref()
2084 if (ret >= 1) in btrfs_find_one_extref()
2139 s64 bytes_left = ((s64)size) - 1; in btrfs_ref_to_path()
2140 struct extent_buffer *eb = eb_in; in btrfs_ref_to_path() local
2147 while (1) { in btrfs_ref_to_path()
2150 read_extent_buffer(eb, dest + bytes_left, in btrfs_ref_to_path()
2152 if (eb != eb_in) { in btrfs_ref_to_path()
2154 btrfs_tree_read_unlock(eb); in btrfs_ref_to_path()
2155 free_extent_buffer(eb); in btrfs_ref_to_path()
2171 eb = path->nodes[0]; in btrfs_ref_to_path()
2172 /* make sure we can use eb after releasing the path */ in btrfs_ref_to_path()
2173 if (eb != eb_in) { in btrfs_ref_to_path()
2178 iref = btrfs_item_ptr(eb, slot, struct btrfs_inode_ref); in btrfs_ref_to_path()
2180 name_len = btrfs_inode_ref_name_len(eb, iref); in btrfs_ref_to_path()
2181 name_off = (unsigned long)(iref + 1); in btrfs_ref_to_path()
2211 const struct extent_buffer *eb; in extent_from_logical() local
2220 key.offset = (u64)-1; in extent_from_logical()
2245 eb = path->nodes[0]; in extent_from_logical()
2246 item_size = btrfs_item_size(eb, path->slots[0]); in extent_from_logical()
2249 ei = btrfs_item_ptr(eb, path->slots[0], struct btrfs_extent_item); in extent_from_logical()
2250 flags = btrfs_extent_flags(eb, ei); in extent_from_logical()
2276 * next ref. after the last ref was processed, 1 is returned.
2280 const struct extent_buffer *eb, in get_extent_inline_ref() argument
2293 flags = btrfs_extent_flags(eb, ei); in get_extent_inline_ref()
2298 (struct btrfs_extent_inline_ref *)(ei + 1); in get_extent_inline_ref()
2301 info = (struct btrfs_tree_block_info *)(ei + 1); in get_extent_inline_ref()
2303 (struct btrfs_extent_inline_ref *)(info + 1); in get_extent_inline_ref()
2306 *out_eiref = (struct btrfs_extent_inline_ref *)(ei + 1); in get_extent_inline_ref()
2315 *out_type = btrfs_get_extent_inline_ref_type(eb, *out_eiref, in get_extent_inline_ref()
2323 return 1; /* last */ in get_extent_inline_ref()
2332 * returns 0 if data was provided, 1 if there was no more data to provide or
2335 int tree_backref_for_extent(unsigned long *ptr, struct extent_buffer *eb, in tree_backref_for_extent() argument
2343 if (*ptr == (unsigned long)-1) in tree_backref_for_extent()
2344 return 1; in tree_backref_for_extent()
2346 while (1) { in tree_backref_for_extent()
2347 ret = get_extent_inline_ref(ptr, eb, key, ei, item_size, in tree_backref_for_extent()
2356 if (ret == 1) in tree_backref_for_extent()
2357 return 1; in tree_backref_for_extent()
2361 *out_root = btrfs_extent_inline_ref_offset(eb, eiref); in tree_backref_for_extent()
2366 info = (struct btrfs_tree_block_info *)(ei + 1); in tree_backref_for_extent()
2367 *out_level = btrfs_tree_block_level(eb, info); in tree_backref_for_extent()
2373 if (ret == 1) in tree_backref_for_extent()
2374 *ptr = (unsigned long)-1; in tree_backref_for_extent()
2538 inodes->val[inodes->elem_cnt + 1] = offset; in build_ino_list()
2579 struct extent_buffer *eb, struct inode_fs_paths *ipath);
2592 struct extent_buffer *eb; in iterate_inode_refs() local
2598 parent ? parent + 1 : 0, BTRFS_INODE_REF_KEY, in iterate_inode_refs()
2611 eb = btrfs_clone_extent_buffer(path->nodes[0]); in iterate_inode_refs()
2612 if (!eb) { in iterate_inode_refs()
2618 iref = btrfs_item_ptr(eb, slot, struct btrfs_inode_ref); in iterate_inode_refs()
2620 for (cur = 0; cur < btrfs_item_size(eb, slot); cur += len) { in iterate_inode_refs()
2621 name_len = btrfs_inode_ref_name_len(eb, iref); in iterate_inode_refs()
2628 (unsigned long)(iref + 1), eb, ipath); in iterate_inode_refs()
2634 free_extent_buffer(eb); in iterate_inode_refs()
2651 struct extent_buffer *eb; in iterate_inode_extrefs() local
2657 while (1) { in iterate_inode_extrefs()
2669 eb = btrfs_clone_extent_buffer(path->nodes[0]); in iterate_inode_extrefs()
2670 if (!eb) { in iterate_inode_extrefs()
2676 item_size = btrfs_item_size(eb, slot); in iterate_inode_extrefs()
2677 ptr = btrfs_item_ptr_offset(eb, slot); in iterate_inode_extrefs()
2684 parent = btrfs_inode_extref_parent(eb, extref); in iterate_inode_extrefs()
2685 name_len = btrfs_inode_extref_name_len(eb, extref); in iterate_inode_extrefs()
2687 (unsigned long)&extref->name, eb, ipath); in iterate_inode_extrefs()
2691 cur_offset += btrfs_inode_extref_name_len(eb, extref); in iterate_inode_extrefs()
2694 free_extent_buffer(eb); in iterate_inode_extrefs()
2709 struct extent_buffer *eb, struct inode_fs_paths *ipath) in inode_to_path() argument
2720 fspath_min = (char *)ipath->fspath->val + (i + 1) * s_ptr; in inode_to_path()
2722 name_off, eb, inum, fspath_min, bytes_left); in inode_to_path()
2837 ret->path->search_commit_root = 1; in btrfs_backref_iter_alloc()
2838 ret->path->skip_locking = 1; in btrfs_backref_iter_alloc()
2855 key.offset = (u64)-1; in btrfs_backref_iter_start()
2944 struct extent_buffer *eb = btrfs_backref_get_eb(iter); in btrfs_backref_iter_next() local
2964 type = btrfs_extent_inline_ref_type(eb, iref); in btrfs_backref_iter_next()
2985 return 1; in btrfs_backref_iter_next()
3074 upper->lowest = 1; in btrfs_backref_cleanup_node()
3144 cur->is_reloc_root = 1; in handle_direct_tree_backref()
3169 cur->level + 1); in handle_direct_tree_backref()
3214 struct extent_buffer *eb; in handle_indirect_tree_backref() local
3225 cur->cowonly = 1; in handle_indirect_tree_backref()
3249 level = cur->level + 1; in handle_indirect_tree_backref()
3252 path->search_commit_root = 1; in handle_indirect_tree_backref()
3253 path->skip_locking = 1; in handle_indirect_tree_backref()
3264 eb = path->nodes[level]; in handle_indirect_tree_backref()
3265 if (btrfs_node_blockptr(eb, path->slots[level]) != cur->bytenr) { in handle_indirect_tree_backref()
3268 cur->bytenr, level - 1, root->root_key.objectid, in handle_indirect_tree_backref()
3299 eb = path->nodes[level]; in handle_indirect_tree_backref()
3300 rb_node = rb_simple_search(&cache->rb_root, eb->start); in handle_indirect_tree_backref()
3302 upper = btrfs_backref_alloc_node(cache, eb->start, in handle_indirect_tree_backref()
3303 lower->level + 1); in handle_indirect_tree_backref()
3310 upper->owner = btrfs_header_owner(eb); in handle_indirect_tree_backref()
3312 upper->cowonly = 1; in handle_indirect_tree_backref()
3318 if (btrfs_block_can_be_shared(trans, root, eb)) in handle_indirect_tree_backref()
3321 upper->checked = 1; in handle_indirect_tree_backref()
3343 upper->owner = btrfs_header_owner(eb); in handle_indirect_tree_backref()
3421 struct extent_buffer *eb; in btrfs_backref_add_tree_node() local
3426 eb = btrfs_backref_get_eb(iter); in btrfs_backref_add_tree_node()
3435 type = btrfs_get_extent_inline_ref_type(eb, iref, in btrfs_backref_add_tree_node()
3442 key.offset = btrfs_extent_inline_ref_offset(eb, iref); in btrfs_backref_add_tree_node()
3483 cur->checked = 1; in btrfs_backref_add_tree_node()