diff options
-rw-r--r-- | fs/btrfs/extent-tree.c | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 85d1ceb90273..a1febf155747 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c | |||
@@ -2366,6 +2366,9 @@ static int run_one_delayed_ref(struct btrfs_trans_handle *trans, | |||
2366 | insert_reserved); | 2366 | insert_reserved); |
2367 | else | 2367 | else |
2368 | BUG(); | 2368 | BUG(); |
2369 | if (ret && insert_reserved) | ||
2370 | btrfs_pin_extent(trans->fs_info, node->bytenr, | ||
2371 | node->num_bytes, 1); | ||
2369 | return ret; | 2372 | return ret; |
2370 | } | 2373 | } |
2371 | 2374 | ||
@@ -8004,21 +8007,14 @@ static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans, | |||
8004 | } | 8007 | } |
8005 | 8008 | ||
8006 | path = btrfs_alloc_path(); | 8009 | path = btrfs_alloc_path(); |
8007 | if (!path) { | 8010 | if (!path) |
8008 | btrfs_free_and_pin_reserved_extent(fs_info, | ||
8009 | extent_key.objectid, | ||
8010 | fs_info->nodesize); | ||
8011 | return -ENOMEM; | 8011 | return -ENOMEM; |
8012 | } | ||
8013 | 8012 | ||
8014 | path->leave_spinning = 1; | 8013 | path->leave_spinning = 1; |
8015 | ret = btrfs_insert_empty_item(trans, fs_info->extent_root, path, | 8014 | ret = btrfs_insert_empty_item(trans, fs_info->extent_root, path, |
8016 | &extent_key, size); | 8015 | &extent_key, size); |
8017 | if (ret) { | 8016 | if (ret) { |
8018 | btrfs_free_path(path); | 8017 | btrfs_free_path(path); |
8019 | btrfs_free_and_pin_reserved_extent(fs_info, | ||
8020 | extent_key.objectid, | ||
8021 | fs_info->nodesize); | ||
8022 | return ret; | 8018 | return ret; |
8023 | } | 8019 | } |
8024 | 8020 | ||