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()
219 * A -1 return indicates ref1 is a 'lower' block than ref2, while 1
226 return -1; in prelim_ref_compare()
228 return 1; in prelim_ref_compare()
230 return -1; in prelim_ref_compare()
232 return 1; in prelim_ref_compare()
234 return -1; in prelim_ref_compare()
236 return 1; in prelim_ref_compare()
238 return -1; in prelim_ref_compare()
240 return 1; in prelim_ref_compare()
242 return -1; in prelim_ref_compare()
244 return 1; in prelim_ref_compare()
246 return -1; in prelim_ref_compare()
248 return 1; in prelim_ref_compare()
271 if ((!sc) || (oldcount == 0 && newcount < 1)) in update_share_count()
274 if (oldcount > 0 && newcount < 1) in update_share_count()
276 else if (oldcount < 1 && newcount > 0) in update_share_count()
366 * - column 1: we've the parent -> done
379 * - column 1, 3: we've the parent -> done
462 return 1; in is_shared_data_backref()
475 struct extent_buffer *eb; in add_all_parents() local
487 eb = path->nodes[level]; in add_all_parents()
488 ret = ulist_add(parents, eb->start, 0, GFP_NOFS); in add_all_parents()
495 * 1. We normally enter this function with the path already pointing to in add_all_parents()
504 eb = path->nodes[0]; in add_all_parents()
505 if (path->slots[0] >= btrfs_header_nritems(eb) || in add_all_parents()
506 is_shared_data_backref(preftrees, eb->start) || in add_all_parents()
507 ref->root_id != btrfs_header_owner(eb)) { in add_all_parents()
515 eb = path->nodes[0]; in add_all_parents()
518 btrfs_item_key_to_cpu(eb, &key, slot); in add_all_parents()
530 (is_shared_data_backref(preftrees, eb->start) || in add_all_parents()
531 ref->root_id != btrfs_header_owner(eb))) { in add_all_parents()
538 fi = btrfs_item_ptr(eb, slot, struct btrfs_file_extent_item); in add_all_parents()
539 type = btrfs_file_extent_type(eb, fi); in add_all_parents()
542 disk_byte = btrfs_file_extent_disk_bytenr(eb, fi); in add_all_parents()
543 data_offset = btrfs_file_extent_offset(eb, fi); in add_all_parents()
553 ret = check_extent_in_eb(ctx, &key, eb, fi, &eie); in add_all_parents()
560 ret = ulist_add_merge_ptr(parents, eb->start, in add_all_parents()
596 struct extent_buffer *eb; in resolve_indirect_ref() local
637 if (root_level + 1 == level) in resolve_indirect_ref()
675 eb = path->nodes[level]; in resolve_indirect_ref()
676 while (!eb) { in resolve_indirect_ref()
678 ret = 1; in resolve_indirect_ref()
682 eb = path->nodes[level]; in resolve_indirect_ref()
839 struct extent_buffer *eb; in add_missing_keys() local
853 check.level = ref->level - 1; in add_missing_keys()
856 eb = read_tree_block(fs_info, ref->wanted_disk_byte, &check); in add_missing_keys()
857 if (IS_ERR(eb)) { in add_missing_keys()
859 return PTR_ERR(eb); in add_missing_keys()
863 btrfs_tree_read_lock(eb); in add_missing_keys()
864 if (btrfs_header_level(eb) == 0) in add_missing_keys()
865 btrfs_item_key_to_cpu(eb, &ref->key_for_search, 0); in add_missing_keys()
867 btrfs_node_key_to_cpu(eb, &ref->key_for_search, 0); in add_missing_keys()
869 btrfs_tree_read_unlock(eb); in add_missing_keys()
870 free_extent_buffer(eb); in add_missing_keys()
901 WARN_ON(1); in add_delayed_refs()
907 count = node->ref_mod * -1; in add_delayed_refs()
925 key_ptr, level + 1, node->bytenr, in add_delayed_refs()
937 ret = add_direct_ref(fs_info, preftrees, level + 1, in add_delayed_refs()
979 WARN_ON(1); in add_delayed_refs()
1034 ptr = (unsigned long)(ei + 1); in add_inline_refs()
1067 *info_level + 1, offset, in add_inline_refs()
1068 ctx->bytenr, 1, NULL, GFP_NOFS); in add_inline_refs()
1074 sdref = (struct btrfs_shared_data_ref *)(iref + 1); in add_inline_refs()
1083 NULL, *info_level + 1, in add_inline_refs()
1084 ctx->bytenr, 1, NULL, GFP_NOFS); in add_inline_refs()
1118 WARN_ON(1); in add_inline_refs()
1145 while (1) { in add_keyed_refs()
1169 info_level + 1, key.offset, in add_keyed_refs()
1170 ctx->bytenr, 1, NULL, GFP_NOFS); in add_keyed_refs()
1188 NULL, info_level + 1, ctx->bytenr, in add_keyed_refs()
1189 1, NULL, GFP_NOFS); in add_keyed_refs()
1222 WARN_ON(1); in add_keyed_refs()
1254 * Level -1 is used for the data extent, which is not reliable to cache in lookup_backref_shared_cache()
1325 * Level -1 is used for the data extent, which is not reliable to cache in store_backref_shared_cache()
1407 key.offset = (u64)-1; in find_parent_nodes()
1428 * Key with offset -1 found, there would have to exist an extent in find_parent_nodes()
1546 sc->self_ref_count == 1) { in find_parent_nodes()
1608 struct extent_buffer *eb; in find_parent_nodes() local
1612 eb = read_tree_block(ctx->fs_info, ref->parent, in find_parent_nodes()
1614 if (IS_ERR(eb)) { in find_parent_nodes()
1615 ret = PTR_ERR(eb); in find_parent_nodes()
1620 btrfs_tree_read_lock(eb); in find_parent_nodes()
1621 ret = find_extent_in_eb(ctx, eb, &eie); in find_parent_nodes()
1623 btrfs_tree_read_unlock(eb); in find_parent_nodes()
1624 free_extent_buffer(eb); in find_parent_nodes()
1761 while (1) { in btrfs_find_all_roots_safe()
1841 * Return: 0 if extent is not shared, 1 if it is shared, < 0 on error.
1902 ret = 1; in btrfs_is_data_extent_shared()
1911 /* -1 means we are in the bytenr of the data extent. */ in btrfs_is_data_extent_shared()
1912 level = -1; in btrfs_is_data_extent_shared()
1914 while (1) { in btrfs_is_data_extent_shared()
1921 /* If shared must return 1, otherwise return 0. */ in btrfs_is_data_extent_shared()
1922 ret = (ret == BACKREF_FOUND_SHARED) ? 1 : 0; in btrfs_is_data_extent_shared()
1925 level, ret == 1); in btrfs_is_data_extent_shared()
1939 * 1) level -1, the data extent: If our data extent was not in btrfs_is_data_extent_shared()
1941 * it might have a single reference item with a count > 1 for in btrfs_is_data_extent_shared()
1962 if ((ctx->refs.nnodes - prev_ref_count) > 1) in btrfs_is_data_extent_shared()
1980 ret = (is_shared ? 1 : 0); in btrfs_is_data_extent_shared()
2004 i = level + 1; in btrfs_is_data_extent_shared()
2013 * has more than 1 file extent item that refers to the data extent. in btrfs_is_data_extent_shared()
2015 if (ret >= 0 && shared.self_ref_count > 1) { in btrfs_is_data_extent_shared()
2019 ctx->prev_extents_cache[slot].is_shared = (ret == 1); in btrfs_is_data_extent_shared()
2021 slot = (slot + 1) % BTRFS_BACKREF_CTX_PREV_EXTENTS_SIZE; in btrfs_is_data_extent_shared()
2059 while (1) { in btrfs_find_one_extref()
2074 if (ret >= 1) in btrfs_find_one_extref()
2129 s64 bytes_left = ((s64)size) - 1; in btrfs_ref_to_path()
2130 struct extent_buffer *eb = eb_in; in btrfs_ref_to_path() local
2137 while (1) { in btrfs_ref_to_path()
2140 read_extent_buffer(eb, dest + bytes_left, in btrfs_ref_to_path()
2142 if (eb != eb_in) { in btrfs_ref_to_path()
2144 btrfs_tree_read_unlock(eb); in btrfs_ref_to_path()
2145 free_extent_buffer(eb); in btrfs_ref_to_path()
2161 eb = path->nodes[0]; in btrfs_ref_to_path()
2162 /* make sure we can use eb after releasing the path */ in btrfs_ref_to_path()
2163 if (eb != eb_in) { in btrfs_ref_to_path()
2168 iref = btrfs_item_ptr(eb, slot, struct btrfs_inode_ref); in btrfs_ref_to_path()
2170 name_len = btrfs_inode_ref_name_len(eb, iref); in btrfs_ref_to_path()
2171 name_off = (unsigned long)(iref + 1); in btrfs_ref_to_path()
2200 const struct extent_buffer *eb; in extent_from_logical() local
2216 key.offset = (u64)-1; in extent_from_logical()
2223 * Key with offset -1 found, there would have to exist an extent in extent_from_logical()
2248 eb = path->nodes[0]; in extent_from_logical()
2250 ei = btrfs_item_ptr(eb, path->slots[0], struct btrfs_extent_item); in extent_from_logical()
2251 flags = btrfs_extent_flags(eb, ei); in extent_from_logical()
2256 found_key->offset, flags, btrfs_item_size(eb, path->slots[0])); in extent_from_logical()
2277 * next ref. after the last ref was processed, 1 is returned.
2281 const struct extent_buffer *eb, in get_extent_inline_ref() argument
2294 flags = btrfs_extent_flags(eb, ei); in get_extent_inline_ref()
2299 (struct btrfs_extent_inline_ref *)(ei + 1); in get_extent_inline_ref()
2302 info = (struct btrfs_tree_block_info *)(ei + 1); in get_extent_inline_ref()
2304 (struct btrfs_extent_inline_ref *)(info + 1); in get_extent_inline_ref()
2307 *out_eiref = (struct btrfs_extent_inline_ref *)(ei + 1); in get_extent_inline_ref()
2316 *out_type = btrfs_get_extent_inline_ref_type(eb, *out_eiref, in get_extent_inline_ref()
2324 return 1; /* last */ in get_extent_inline_ref()
2333 * returns 0 if data was provided, 1 if there was no more data to provide or
2336 int tree_backref_for_extent(unsigned long *ptr, struct extent_buffer *eb, in tree_backref_for_extent() argument
2344 if (*ptr == (unsigned long)-1) in tree_backref_for_extent()
2345 return 1; in tree_backref_for_extent()
2347 while (1) { in tree_backref_for_extent()
2348 ret = get_extent_inline_ref(ptr, eb, key, ei, item_size, in tree_backref_for_extent()
2357 if (ret == 1) in tree_backref_for_extent()
2358 return 1; in tree_backref_for_extent()
2362 *out_root = btrfs_extent_inline_ref_offset(eb, eiref); in tree_backref_for_extent()
2367 info = (struct btrfs_tree_block_info *)(ei + 1); in tree_backref_for_extent()
2368 *out_level = btrfs_tree_block_level(eb, info); in tree_backref_for_extent()
2374 if (ret == 1) in tree_backref_for_extent()
2375 *ptr = (unsigned long)-1; in tree_backref_for_extent()
2539 inodes->val[inodes->elem_cnt + 1] = offset; in build_ino_list()
2582 struct extent_buffer *eb, struct inode_fs_paths *ipath);
2595 struct extent_buffer *eb; in iterate_inode_refs() local
2601 parent ? parent + 1 : 0, BTRFS_INODE_REF_KEY, in iterate_inode_refs()
2614 eb = btrfs_clone_extent_buffer(path->nodes[0]); in iterate_inode_refs()
2615 if (!eb) { in iterate_inode_refs()
2621 iref = btrfs_item_ptr(eb, slot, struct btrfs_inode_ref); in iterate_inode_refs()
2623 for (cur = 0; cur < btrfs_item_size(eb, slot); cur += len) { in iterate_inode_refs()
2624 name_len = btrfs_inode_ref_name_len(eb, iref); in iterate_inode_refs()
2631 (unsigned long)(iref + 1), eb, ipath); in iterate_inode_refs()
2637 free_extent_buffer(eb); in iterate_inode_refs()
2654 struct extent_buffer *eb; in iterate_inode_extrefs() local
2660 while (1) { in iterate_inode_extrefs()
2672 eb = btrfs_clone_extent_buffer(path->nodes[0]); in iterate_inode_extrefs()
2673 if (!eb) { in iterate_inode_extrefs()
2679 item_size = btrfs_item_size(eb, slot); in iterate_inode_extrefs()
2680 ptr = btrfs_item_ptr_offset(eb, slot); in iterate_inode_extrefs()
2687 parent = btrfs_inode_extref_parent(eb, extref); in iterate_inode_extrefs()
2688 name_len = btrfs_inode_extref_name_len(eb, extref); in iterate_inode_extrefs()
2690 (unsigned long)&extref->name, eb, ipath); in iterate_inode_extrefs()
2694 cur_offset += btrfs_inode_extref_name_len(eb, extref); in iterate_inode_extrefs()
2697 free_extent_buffer(eb); in iterate_inode_extrefs()
2712 struct extent_buffer *eb, struct inode_fs_paths *ipath) in inode_to_path() argument
2723 fspath_min = (char *)ipath->fspath->val + (i + 1) * s_ptr; in inode_to_path()
2725 name_off, eb, inum, fspath_min, bytes_left); in inode_to_path()
2867 key.offset = (u64)-1; in btrfs_backref_iter_start()
2875 * Key with offset -1 found, there would have to exist an extent in btrfs_backref_iter_start()
2968 struct extent_buffer *eb = iter->path->nodes[0]; in btrfs_backref_iter_next() local
2988 type = btrfs_extent_inline_ref_type(eb, iref); in btrfs_backref_iter_next()
3016 return 1; in btrfs_backref_iter_next()
3066 ASSERT(node->eb == NULL); in btrfs_backref_free_node()
3096 btrfs_tree_unlock(node->eb); in btrfs_backref_unlock_node_buffer()
3103 if (node->eb) { in btrfs_backref_drop_node_buffer()
3105 free_extent_buffer(node->eb); in btrfs_backref_drop_node_buffer()
3106 node->eb = NULL; in btrfs_backref_drop_node_buffer()
3177 ASSERT(upper && lower && upper->level == lower->level + 1); in btrfs_backref_link_edge()
3208 cur->is_reloc_root = 1; in handle_direct_tree_backref()
3233 cur->level + 1); in handle_direct_tree_backref()
3278 struct extent_buffer *eb; in handle_indirect_tree_backref() local
3317 level = cur->level + 1; in handle_indirect_tree_backref()
3332 eb = path->nodes[level]; in handle_indirect_tree_backref()
3333 if (btrfs_node_blockptr(eb, path->slots[level]) != cur->bytenr) { in handle_indirect_tree_backref()
3336 cur->bytenr, level - 1, btrfs_root_id(root), in handle_indirect_tree_backref()
3367 eb = path->nodes[level]; in handle_indirect_tree_backref()
3368 rb_node = rb_simple_search(&cache->rb_root, eb->start); in handle_indirect_tree_backref()
3370 upper = btrfs_backref_alloc_node(cache, eb->start, in handle_indirect_tree_backref()
3371 lower->level + 1); in handle_indirect_tree_backref()
3378 upper->owner = btrfs_header_owner(eb); in handle_indirect_tree_backref()
3393 if (btrfs_block_can_be_shared(trans, root, eb)) in handle_indirect_tree_backref()
3396 upper->checked = 1; in handle_indirect_tree_backref()
3418 upper->owner = btrfs_header_owner(eb); in handle_indirect_tree_backref()
3496 struct extent_buffer *eb; in btrfs_backref_add_tree_node() local
3501 eb = iter->path->nodes[0]; in btrfs_backref_add_tree_node()
3510 type = btrfs_get_extent_inline_ref_type(eb, iref, in btrfs_backref_add_tree_node()
3517 key.offset = btrfs_extent_inline_ref_offset(eb, iref); in btrfs_backref_add_tree_node()
3558 cur->checked = 1; in btrfs_backref_add_tree_node()