summaryrefslogtreecommitdiff
path: root/extent-tree.c
diff options
context:
space:
mode:
authorYan Zheng <zheng.yan@oracle.com>2009-06-11 09:27:31 -0400
committerChris Mason <chris.mason@oracle.com>2009-06-11 09:27:37 -0400
commit0e3c5d410ff0598d3311304983756aa6194724e9 (patch)
treeef8d039bf869fecb3b3fc3f79df85522fc935ac0 /extent-tree.c
parent0030f1d3aead310aa3a1d951311d47b3a819716b (diff)
Check duplicate backrefs for both data and metadata
lookup_inline_extent_backref only checks for duplicate backref for data extent. It assumes backrefs for tree block never conflict. This patch makes lookup_inline_extent_backref check duplicate backrefs for both data and tree block, so that we can detect potential bug earlier. Signed-off-by: Yan Zheng <zheng.yan@oracle.com> Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'extent-tree.c')
-rw-r--r--extent-tree.c10
1 files changed, 2 insertions, 8 deletions
diff --git a/extent-tree.c b/extent-tree.c
index 3ec57fa5..b2f9bb22 100644
--- a/extent-tree.c
+++ b/extent-tree.c
@@ -1061,12 +1061,6 @@ static int lookup_inline_extent_backref(struct btrfs_trans_handle *trans,
#endif
BUG_ON(item_size < sizeof(*ei));
- if (owner < BTRFS_FIRST_FREE_OBJECTID && insert &&
- item_size + extra_size >= BTRFS_MAX_EXTENT_ITEM_SIZE(root)) {
- err = -EAGAIN;
- goto out;
- }
-
ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item);
flags = btrfs_extent_flags(leaf, ei);
@@ -1139,8 +1133,8 @@ static int lookup_inline_extent_backref(struct btrfs_trans_handle *trans,
* For simplicity, we just do not add new inline back
* ref if there is any back ref item.
*/
- if (owner >= BTRFS_FIRST_FREE_OBJECTID &&
- find_next_key(path, &key) == 0 && key.objectid == bytenr) {
+ if (find_next_key(path, &key) == 0 && key.objectid == bytenr &&
+ key.type < BTRFS_BLOCK_GROUP_ITEM_KEY) {
err = -EAGAIN;
goto out;
}