|
@@ -2366,6 +2366,9 @@ static int run_one_delayed_ref(struct btrfs_trans_handle *trans,
|
|
|
insert_reserved);
|
|
|
else
|
|
|
BUG();
|
|
|
+ if (ret && insert_reserved)
|
|
|
+ btrfs_pin_extent(trans->fs_info, node->bytenr,
|
|
|
+ node->num_bytes, 1);
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
@@ -8004,21 +8007,14 @@ static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
|
|
|
}
|
|
|
|
|
|
path = btrfs_alloc_path();
|
|
|
- if (!path) {
|
|
|
- btrfs_free_and_pin_reserved_extent(fs_info,
|
|
|
- extent_key.objectid,
|
|
|
- fs_info->nodesize);
|
|
|
+ if (!path)
|
|
|
return -ENOMEM;
|
|
|
- }
|
|
|
|
|
|
path->leave_spinning = 1;
|
|
|
ret = btrfs_insert_empty_item(trans, fs_info->extent_root, path,
|
|
|
&extent_key, size);
|
|
|
if (ret) {
|
|
|
btrfs_free_path(path);
|
|
|
- btrfs_free_and_pin_reserved_extent(fs_info,
|
|
|
- extent_key.objectid,
|
|
|
- fs_info->nodesize);
|
|
|
return ret;
|
|
|
}
|
|
|
|