aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/btrfs/extent-tree.c12
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