extent-tree.c (8e1d02909185bddc76e98e680d7fea38be0e87da) extent-tree.c (29cbcf401793f4e2c871c846edc2191731df2c41)
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (C) 2007 Oracle. All rights reserved.
4 */
5
6#include <linux/sched.h>
7#include <linux/sched/signal.h>
8#include <linux/pagemap.h>

--- 73 unchanged lines hidden (view full) ---

82
83 clear_extent_bits(&fs_info->excluded_extents, start, end,
84 EXTENT_UPTODATE);
85}
86
87/* simple helper to search for an existing data extent at a given offset */
88int btrfs_lookup_data_extent(struct btrfs_fs_info *fs_info, u64 start, u64 len)
89{
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (C) 2007 Oracle. All rights reserved.
4 */
5
6#include <linux/sched.h>
7#include <linux/sched/signal.h>
8#include <linux/pagemap.h>

--- 73 unchanged lines hidden (view full) ---

82
83 clear_extent_bits(&fs_info->excluded_extents, start, end,
84 EXTENT_UPTODATE);
85}
86
87/* simple helper to search for an existing data extent at a given offset */
88int btrfs_lookup_data_extent(struct btrfs_fs_info *fs_info, u64 start, u64 len)
89{
90 struct btrfs_root *root = btrfs_extent_root(fs_info, start);
90 int ret;
91 struct btrfs_key key;
92 struct btrfs_path *path;
93
94 path = btrfs_alloc_path();
95 if (!path)
96 return -ENOMEM;
97
98 key.objectid = start;
99 key.offset = len;
100 key.type = BTRFS_EXTENT_ITEM_KEY;
91 int ret;
92 struct btrfs_key key;
93 struct btrfs_path *path;
94
95 path = btrfs_alloc_path();
96 if (!path)
97 return -ENOMEM;
98
99 key.objectid = start;
100 key.offset = len;
101 key.type = BTRFS_EXTENT_ITEM_KEY;
101 ret = btrfs_search_slot(NULL, fs_info->extent_root, &key, path, 0, 0);
102 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
102 btrfs_free_path(path);
103 return ret;
104}
105
106/*
107 * helper function to lookup reference count and flags of a tree block.
108 *
109 * the head node for delayed ref is used to store the sum of all the
110 * reference count modifications queued up in the rbtree. the head
111 * node may also store the extent flags to set. This way you can check
112 * to see what the reference count and extent flags would be if all of
113 * the delayed refs are not processed.
114 */
115int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans,
116 struct btrfs_fs_info *fs_info, u64 bytenr,
117 u64 offset, int metadata, u64 *refs, u64 *flags)
118{
103 btrfs_free_path(path);
104 return ret;
105}
106
107/*
108 * helper function to lookup reference count and flags of a tree block.
109 *
110 * the head node for delayed ref is used to store the sum of all the
111 * reference count modifications queued up in the rbtree. the head
112 * node may also store the extent flags to set. This way you can check
113 * to see what the reference count and extent flags would be if all of
114 * the delayed refs are not processed.
115 */
116int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans,
117 struct btrfs_fs_info *fs_info, u64 bytenr,
118 u64 offset, int metadata, u64 *refs, u64 *flags)
119{
120 struct btrfs_root *extent_root;
119 struct btrfs_delayed_ref_head *head;
120 struct btrfs_delayed_ref_root *delayed_refs;
121 struct btrfs_path *path;
122 struct btrfs_extent_item *ei;
123 struct extent_buffer *leaf;
124 struct btrfs_key key;
125 u32 item_size;
126 u64 num_refs;

--- 21 unchanged lines hidden (view full) ---

148search_again:
149 key.objectid = bytenr;
150 key.offset = offset;
151 if (metadata)
152 key.type = BTRFS_METADATA_ITEM_KEY;
153 else
154 key.type = BTRFS_EXTENT_ITEM_KEY;
155
121 struct btrfs_delayed_ref_head *head;
122 struct btrfs_delayed_ref_root *delayed_refs;
123 struct btrfs_path *path;
124 struct btrfs_extent_item *ei;
125 struct extent_buffer *leaf;
126 struct btrfs_key key;
127 u32 item_size;
128 u64 num_refs;

--- 21 unchanged lines hidden (view full) ---

150search_again:
151 key.objectid = bytenr;
152 key.offset = offset;
153 if (metadata)
154 key.type = BTRFS_METADATA_ITEM_KEY;
155 else
156 key.type = BTRFS_EXTENT_ITEM_KEY;
157
156 ret = btrfs_search_slot(NULL, fs_info->extent_root, &key, path, 0, 0);
158 extent_root = btrfs_extent_root(fs_info, bytenr);
159 ret = btrfs_search_slot(NULL, extent_root, &key, path, 0, 0);
157 if (ret < 0)
158 goto out_free;
159
160 if (ret > 0 && metadata && key.type == BTRFS_METADATA_ITEM_KEY) {
161 if (path->slots[0]) {
162 path->slots[0]--;
163 btrfs_item_key_to_cpu(path->nodes[0], &key,
164 path->slots[0]);

--- 273 unchanged lines hidden (view full) ---

438}
439
440static noinline int lookup_extent_data_ref(struct btrfs_trans_handle *trans,
441 struct btrfs_path *path,
442 u64 bytenr, u64 parent,
443 u64 root_objectid,
444 u64 owner, u64 offset)
445{
160 if (ret < 0)
161 goto out_free;
162
163 if (ret > 0 && metadata && key.type == BTRFS_METADATA_ITEM_KEY) {
164 if (path->slots[0]) {
165 path->slots[0]--;
166 btrfs_item_key_to_cpu(path->nodes[0], &key,
167 path->slots[0]);

--- 273 unchanged lines hidden (view full) ---

441}
442
443static noinline int lookup_extent_data_ref(struct btrfs_trans_handle *trans,
444 struct btrfs_path *path,
445 u64 bytenr, u64 parent,
446 u64 root_objectid,
447 u64 owner, u64 offset)
448{
446 struct btrfs_root *root = trans->fs_info->extent_root;
449 struct btrfs_root *root = btrfs_extent_root(trans->fs_info, bytenr);
447 struct btrfs_key key;
448 struct btrfs_extent_data_ref *ref;
449 struct extent_buffer *leaf;
450 u32 nritems;
451 int ret;
452 int recow;
453 int err = -ENOENT;
454

--- 59 unchanged lines hidden (view full) ---

514}
515
516static noinline int insert_extent_data_ref(struct btrfs_trans_handle *trans,
517 struct btrfs_path *path,
518 u64 bytenr, u64 parent,
519 u64 root_objectid, u64 owner,
520 u64 offset, int refs_to_add)
521{
450 struct btrfs_key key;
451 struct btrfs_extent_data_ref *ref;
452 struct extent_buffer *leaf;
453 u32 nritems;
454 int ret;
455 int recow;
456 int err = -ENOENT;
457

--- 59 unchanged lines hidden (view full) ---

517}
518
519static noinline int insert_extent_data_ref(struct btrfs_trans_handle *trans,
520 struct btrfs_path *path,
521 u64 bytenr, u64 parent,
522 u64 root_objectid, u64 owner,
523 u64 offset, int refs_to_add)
524{
522 struct btrfs_root *root = trans->fs_info->extent_root;
525 struct btrfs_root *root = btrfs_extent_root(trans->fs_info, bytenr);
523 struct btrfs_key key;
524 struct extent_buffer *leaf;
525 u32 size;
526 u32 num_refs;
527 int ret;
528
529 key.objectid = bytenr;
530 if (parent) {

--- 150 unchanged lines hidden (view full) ---

681 return num_refs;
682}
683
684static noinline int lookup_tree_block_ref(struct btrfs_trans_handle *trans,
685 struct btrfs_path *path,
686 u64 bytenr, u64 parent,
687 u64 root_objectid)
688{
526 struct btrfs_key key;
527 struct extent_buffer *leaf;
528 u32 size;
529 u32 num_refs;
530 int ret;
531
532 key.objectid = bytenr;
533 if (parent) {

--- 150 unchanged lines hidden (view full) ---

684 return num_refs;
685}
686
687static noinline int lookup_tree_block_ref(struct btrfs_trans_handle *trans,
688 struct btrfs_path *path,
689 u64 bytenr, u64 parent,
690 u64 root_objectid)
691{
689 struct btrfs_root *root = trans->fs_info->extent_root;
692 struct btrfs_root *root = btrfs_extent_root(trans->fs_info, bytenr);
690 struct btrfs_key key;
691 int ret;
692
693 key.objectid = bytenr;
694 if (parent) {
695 key.type = BTRFS_SHARED_BLOCK_REF_KEY;
696 key.offset = parent;
697 } else {

--- 7 unchanged lines hidden (view full) ---

705 return ret;
706}
707
708static noinline int insert_tree_block_ref(struct btrfs_trans_handle *trans,
709 struct btrfs_path *path,
710 u64 bytenr, u64 parent,
711 u64 root_objectid)
712{
693 struct btrfs_key key;
694 int ret;
695
696 key.objectid = bytenr;
697 if (parent) {
698 key.type = BTRFS_SHARED_BLOCK_REF_KEY;
699 key.offset = parent;
700 } else {

--- 7 unchanged lines hidden (view full) ---

708 return ret;
709}
710
711static noinline int insert_tree_block_ref(struct btrfs_trans_handle *trans,
712 struct btrfs_path *path,
713 u64 bytenr, u64 parent,
714 u64 root_objectid)
715{
716 struct btrfs_root *root = btrfs_extent_root(trans->fs_info, bytenr);
713 struct btrfs_key key;
714 int ret;
715
716 key.objectid = bytenr;
717 if (parent) {
718 key.type = BTRFS_SHARED_BLOCK_REF_KEY;
719 key.offset = parent;
720 } else {
721 key.type = BTRFS_TREE_BLOCK_REF_KEY;
722 key.offset = root_objectid;
723 }
724
717 struct btrfs_key key;
718 int ret;
719
720 key.objectid = bytenr;
721 if (parent) {
722 key.type = BTRFS_SHARED_BLOCK_REF_KEY;
723 key.offset = parent;
724 } else {
725 key.type = BTRFS_TREE_BLOCK_REF_KEY;
726 key.offset = root_objectid;
727 }
728
725 ret = btrfs_insert_empty_item(trans, trans->fs_info->extent_root,
726 path, &key, 0);
729 ret = btrfs_insert_empty_item(trans, root, path, &key, 0);
727 btrfs_release_path(path);
728 return ret;
729}
730
731static inline int extent_ref_type(u64 parent, u64 owner)
732{
733 int type;
734 if (owner < BTRFS_FIRST_FREE_OBJECTID) {

--- 48 unchanged lines hidden (view full) ---

783int lookup_inline_extent_backref(struct btrfs_trans_handle *trans,
784 struct btrfs_path *path,
785 struct btrfs_extent_inline_ref **ref_ret,
786 u64 bytenr, u64 num_bytes,
787 u64 parent, u64 root_objectid,
788 u64 owner, u64 offset, int insert)
789{
790 struct btrfs_fs_info *fs_info = trans->fs_info;
730 btrfs_release_path(path);
731 return ret;
732}
733
734static inline int extent_ref_type(u64 parent, u64 owner)
735{
736 int type;
737 if (owner < BTRFS_FIRST_FREE_OBJECTID) {

--- 48 unchanged lines hidden (view full) ---

786int lookup_inline_extent_backref(struct btrfs_trans_handle *trans,
787 struct btrfs_path *path,
788 struct btrfs_extent_inline_ref **ref_ret,
789 u64 bytenr, u64 num_bytes,
790 u64 parent, u64 root_objectid,
791 u64 owner, u64 offset, int insert)
792{
793 struct btrfs_fs_info *fs_info = trans->fs_info;
791 struct btrfs_root *root = fs_info->extent_root;
794 struct btrfs_root *root = btrfs_extent_root(fs_info, bytenr);
792 struct btrfs_key key;
793 struct extent_buffer *leaf;
794 struct btrfs_extent_item *ei;
795 struct btrfs_extent_inline_ref *iref;
796 u64 flags;
797 u64 item_size;
798 unsigned long ptr;
799 unsigned long end;

--- 769 unchanged lines hidden (view full) ---

1569 }
1570}
1571
1572static int run_delayed_extent_op(struct btrfs_trans_handle *trans,
1573 struct btrfs_delayed_ref_head *head,
1574 struct btrfs_delayed_extent_op *extent_op)
1575{
1576 struct btrfs_fs_info *fs_info = trans->fs_info;
795 struct btrfs_key key;
796 struct extent_buffer *leaf;
797 struct btrfs_extent_item *ei;
798 struct btrfs_extent_inline_ref *iref;
799 u64 flags;
800 u64 item_size;
801 unsigned long ptr;
802 unsigned long end;

--- 769 unchanged lines hidden (view full) ---

1572 }
1573}
1574
1575static int run_delayed_extent_op(struct btrfs_trans_handle *trans,
1576 struct btrfs_delayed_ref_head *head,
1577 struct btrfs_delayed_extent_op *extent_op)
1578{
1579 struct btrfs_fs_info *fs_info = trans->fs_info;
1580 struct btrfs_root *root;
1577 struct btrfs_key key;
1578 struct btrfs_path *path;
1579 struct btrfs_extent_item *ei;
1580 struct extent_buffer *leaf;
1581 u32 item_size;
1582 int ret;
1583 int err = 0;
1584 int metadata = !extent_op->is_data;

--- 13 unchanged lines hidden (view full) ---

1598 if (metadata) {
1599 key.type = BTRFS_METADATA_ITEM_KEY;
1600 key.offset = extent_op->level;
1601 } else {
1602 key.type = BTRFS_EXTENT_ITEM_KEY;
1603 key.offset = head->num_bytes;
1604 }
1605
1581 struct btrfs_key key;
1582 struct btrfs_path *path;
1583 struct btrfs_extent_item *ei;
1584 struct extent_buffer *leaf;
1585 u32 item_size;
1586 int ret;
1587 int err = 0;
1588 int metadata = !extent_op->is_data;

--- 13 unchanged lines hidden (view full) ---

1602 if (metadata) {
1603 key.type = BTRFS_METADATA_ITEM_KEY;
1604 key.offset = extent_op->level;
1605 } else {
1606 key.type = BTRFS_EXTENT_ITEM_KEY;
1607 key.offset = head->num_bytes;
1608 }
1609
1610 root = btrfs_extent_root(fs_info, key.objectid);
1606again:
1611again:
1607 ret = btrfs_search_slot(trans, fs_info->extent_root, &key, path, 0, 1);
1612 ret = btrfs_search_slot(trans, root, &key, path, 0, 1);
1608 if (ret < 0) {
1609 err = ret;
1610 goto out;
1611 }
1612 if (ret > 0) {
1613 if (metadata) {
1614 if (path->slots[0] > 0) {
1615 path->slots[0]--;

--- 666 unchanged lines hidden (view full) ---

2282}
2283
2284static noinline int check_committed_ref(struct btrfs_root *root,
2285 struct btrfs_path *path,
2286 u64 objectid, u64 offset, u64 bytenr,
2287 bool strict)
2288{
2289 struct btrfs_fs_info *fs_info = root->fs_info;
1613 if (ret < 0) {
1614 err = ret;
1615 goto out;
1616 }
1617 if (ret > 0) {
1618 if (metadata) {
1619 if (path->slots[0] > 0) {
1620 path->slots[0]--;

--- 666 unchanged lines hidden (view full) ---

2287}
2288
2289static noinline int check_committed_ref(struct btrfs_root *root,
2290 struct btrfs_path *path,
2291 u64 objectid, u64 offset, u64 bytenr,
2292 bool strict)
2293{
2294 struct btrfs_fs_info *fs_info = root->fs_info;
2290 struct btrfs_root *extent_root = fs_info->extent_root;
2295 struct btrfs_root *extent_root = btrfs_extent_root(fs_info, bytenr);
2291 struct extent_buffer *leaf;
2292 struct btrfs_extent_data_ref *ref;
2293 struct btrfs_extent_inline_ref *iref;
2294 struct btrfs_extent_item *ei;
2295 struct btrfs_key key;
2296 u32 item_size;
2297 int type;
2298 int ret;

--- 618 unchanged lines hidden (view full) ---

2917 struct btrfs_delayed_ref_node *node, u64 parent,
2918 u64 root_objectid, u64 owner_objectid,
2919 u64 owner_offset, int refs_to_drop,
2920 struct btrfs_delayed_extent_op *extent_op)
2921{
2922 struct btrfs_fs_info *info = trans->fs_info;
2923 struct btrfs_key key;
2924 struct btrfs_path *path;
2296 struct extent_buffer *leaf;
2297 struct btrfs_extent_data_ref *ref;
2298 struct btrfs_extent_inline_ref *iref;
2299 struct btrfs_extent_item *ei;
2300 struct btrfs_key key;
2301 u32 item_size;
2302 int type;
2303 int ret;

--- 618 unchanged lines hidden (view full) ---

2922 struct btrfs_delayed_ref_node *node, u64 parent,
2923 u64 root_objectid, u64 owner_objectid,
2924 u64 owner_offset, int refs_to_drop,
2925 struct btrfs_delayed_extent_op *extent_op)
2926{
2927 struct btrfs_fs_info *info = trans->fs_info;
2928 struct btrfs_key key;
2929 struct btrfs_path *path;
2925 struct btrfs_root *extent_root = info->extent_root;
2930 struct btrfs_root *extent_root;
2926 struct extent_buffer *leaf;
2927 struct btrfs_extent_item *ei;
2928 struct btrfs_extent_inline_ref *iref;
2929 int ret;
2930 int is_data;
2931 int extent_slot = 0;
2932 int found_extent = 0;
2933 int num_to_del = 1;
2934 u32 item_size;
2935 u64 refs;
2936 u64 bytenr = node->bytenr;
2937 u64 num_bytes = node->num_bytes;
2938 int last_ref = 0;
2939 bool skinny_metadata = btrfs_fs_incompat(info, SKINNY_METADATA);
2940
2931 struct extent_buffer *leaf;
2932 struct btrfs_extent_item *ei;
2933 struct btrfs_extent_inline_ref *iref;
2934 int ret;
2935 int is_data;
2936 int extent_slot = 0;
2937 int found_extent = 0;
2938 int num_to_del = 1;
2939 u32 item_size;
2940 u64 refs;
2941 u64 bytenr = node->bytenr;
2942 u64 num_bytes = node->num_bytes;
2943 int last_ref = 0;
2944 bool skinny_metadata = btrfs_fs_incompat(info, SKINNY_METADATA);
2945
2946 extent_root = btrfs_extent_root(info, bytenr);
2947
2941 path = btrfs_alloc_path();
2942 if (!path)
2943 return -ENOMEM;
2944
2945 is_data = owner_objectid >= BTRFS_FIRST_FREE_OBJECTID;
2946
2947 if (!is_data && refs_to_drop != 1) {
2948 btrfs_crit(info,

--- 1618 unchanged lines hidden (view full) ---

4567}
4568
4569static int alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
4570 u64 parent, u64 root_objectid,
4571 u64 flags, u64 owner, u64 offset,
4572 struct btrfs_key *ins, int ref_mod)
4573{
4574 struct btrfs_fs_info *fs_info = trans->fs_info;
2948 path = btrfs_alloc_path();
2949 if (!path)
2950 return -ENOMEM;
2951
2952 is_data = owner_objectid >= BTRFS_FIRST_FREE_OBJECTID;
2953
2954 if (!is_data && refs_to_drop != 1) {
2955 btrfs_crit(info,

--- 1618 unchanged lines hidden (view full) ---

4574}
4575
4576static int alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
4577 u64 parent, u64 root_objectid,
4578 u64 flags, u64 owner, u64 offset,
4579 struct btrfs_key *ins, int ref_mod)
4580{
4581 struct btrfs_fs_info *fs_info = trans->fs_info;
4582 struct btrfs_root *extent_root;
4575 int ret;
4576 struct btrfs_extent_item *extent_item;
4577 struct btrfs_extent_inline_ref *iref;
4578 struct btrfs_path *path;
4579 struct extent_buffer *leaf;
4580 int type;
4581 u32 size;
4582
4583 if (parent > 0)
4584 type = BTRFS_SHARED_DATA_REF_KEY;
4585 else
4586 type = BTRFS_EXTENT_DATA_REF_KEY;
4587
4588 size = sizeof(*extent_item) + btrfs_extent_inline_ref_size(type);
4589
4590 path = btrfs_alloc_path();
4591 if (!path)
4592 return -ENOMEM;
4593
4583 int ret;
4584 struct btrfs_extent_item *extent_item;
4585 struct btrfs_extent_inline_ref *iref;
4586 struct btrfs_path *path;
4587 struct extent_buffer *leaf;
4588 int type;
4589 u32 size;
4590
4591 if (parent > 0)
4592 type = BTRFS_SHARED_DATA_REF_KEY;
4593 else
4594 type = BTRFS_EXTENT_DATA_REF_KEY;
4595
4596 size = sizeof(*extent_item) + btrfs_extent_inline_ref_size(type);
4597
4598 path = btrfs_alloc_path();
4599 if (!path)
4600 return -ENOMEM;
4601
4594 ret = btrfs_insert_empty_item(trans, fs_info->extent_root, path,
4595 ins, size);
4602 extent_root = btrfs_extent_root(fs_info, ins->objectid);
4603 ret = btrfs_insert_empty_item(trans, extent_root, path, ins, size);
4596 if (ret) {
4597 btrfs_free_path(path);
4598 return ret;
4599 }
4600
4601 leaf = path->nodes[0];
4602 extent_item = btrfs_item_ptr(leaf, path->slots[0],
4603 struct btrfs_extent_item);

--- 35 unchanged lines hidden (view full) ---

4639 return ret;
4640}
4641
4642static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
4643 struct btrfs_delayed_ref_node *node,
4644 struct btrfs_delayed_extent_op *extent_op)
4645{
4646 struct btrfs_fs_info *fs_info = trans->fs_info;
4604 if (ret) {
4605 btrfs_free_path(path);
4606 return ret;
4607 }
4608
4609 leaf = path->nodes[0];
4610 extent_item = btrfs_item_ptr(leaf, path->slots[0],
4611 struct btrfs_extent_item);

--- 35 unchanged lines hidden (view full) ---

4647 return ret;
4648}
4649
4650static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
4651 struct btrfs_delayed_ref_node *node,
4652 struct btrfs_delayed_extent_op *extent_op)
4653{
4654 struct btrfs_fs_info *fs_info = trans->fs_info;
4655 struct btrfs_root *extent_root;
4647 int ret;
4648 struct btrfs_extent_item *extent_item;
4649 struct btrfs_key extent_key;
4650 struct btrfs_tree_block_info *block_info;
4651 struct btrfs_extent_inline_ref *iref;
4652 struct btrfs_path *path;
4653 struct extent_buffer *leaf;
4654 struct btrfs_delayed_tree_ref *ref;

--- 15 unchanged lines hidden (view full) ---

4670 size += sizeof(*block_info);
4671 num_bytes = node->num_bytes;
4672 }
4673
4674 path = btrfs_alloc_path();
4675 if (!path)
4676 return -ENOMEM;
4677
4656 int ret;
4657 struct btrfs_extent_item *extent_item;
4658 struct btrfs_key extent_key;
4659 struct btrfs_tree_block_info *block_info;
4660 struct btrfs_extent_inline_ref *iref;
4661 struct btrfs_path *path;
4662 struct extent_buffer *leaf;
4663 struct btrfs_delayed_tree_ref *ref;

--- 15 unchanged lines hidden (view full) ---

4679 size += sizeof(*block_info);
4680 num_bytes = node->num_bytes;
4681 }
4682
4683 path = btrfs_alloc_path();
4684 if (!path)
4685 return -ENOMEM;
4686
4678 ret = btrfs_insert_empty_item(trans, fs_info->extent_root, path,
4679 &extent_key, size);
4687 extent_root = btrfs_extent_root(fs_info, extent_key.objectid);
4688 ret = btrfs_insert_empty_item(trans, extent_root, path, &extent_key,
4689 size);
4680 if (ret) {
4681 btrfs_free_path(path);
4682 return ret;
4683 }
4684
4685 leaf = path->nodes[0];
4686 extent_item = btrfs_item_ptr(leaf, path->slots[0],
4687 struct btrfs_extent_item);

--- 1450 unchanged lines hidden ---
4690 if (ret) {
4691 btrfs_free_path(path);
4692 return ret;
4693 }
4694
4695 leaf = path->nodes[0];
4696 extent_item = btrfs_item_ptr(leaf, path->slots[0],
4697 struct btrfs_extent_item);

--- 1450 unchanged lines hidden ---