diff options
author | Yan Zheng <zheng.yan@oracle.com> | 2008-10-29 14:49:05 -0400 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2008-10-29 14:49:05 -0400 |
commit | f82d02d9d8222183b7945e893111a6d1bf67ae4a (patch) | |
tree | 70be1bb231f4cc2e673920774e759359f3dcf1a5 /fs/btrfs/transaction.c | |
parent | c8b978188c9a0fd3d535c13debd19d522b726f1f (diff) |
Btrfs: Improve space balancing code
This patch improves the space balancing code to keep more sharing
of tree blocks. The only case that breaks sharing of tree blocks is
data extents get fragmented during balancing. The main changes in
this patch are:
Add a 'drop sub-tree' function. This solves the problem in old code
that BTRFS_HEADER_FLAG_WRITTEN check breaks sharing of tree block.
Remove relocation mapping tree. Relocation mappings are stored in
struct btrfs_ref_path and updated dynamically during walking up/down
the reference path. This reduces CPU usage and simplifies code.
This patch also fixes a bug. Root items for reloc trees should be
updated in btrfs_free_reloc_root.
Signed-off-by: Yan Zheng <zheng.yan@oracle.com>
Diffstat (limited to 'fs/btrfs/transaction.c')
-rw-r--r-- | fs/btrfs/transaction.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index 5ecc24d634a2..1df67129cc3d 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c | |||
@@ -521,7 +521,7 @@ static noinline int add_dirty_roots(struct btrfs_trans_handle *trans, | |||
521 | dirty = root->dirty_root; | 521 | dirty = root->dirty_root; |
522 | 522 | ||
523 | btrfs_free_log(trans, root); | 523 | btrfs_free_log(trans, root); |
524 | btrfs_free_reloc_root(root); | 524 | btrfs_free_reloc_root(trans, root); |
525 | 525 | ||
526 | if (root->commit_root == root->node) { | 526 | if (root->commit_root == root->node) { |
527 | WARN_ON(root->node->start != | 527 | WARN_ON(root->node->start != |
@@ -930,8 +930,6 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans, | |||
930 | */ | 930 | */ |
931 | btrfs_free_log_root_tree(trans, root->fs_info); | 931 | btrfs_free_log_root_tree(trans, root->fs_info); |
932 | 932 | ||
933 | btrfs_free_reloc_mappings(root); | ||
934 | |||
935 | ret = btrfs_commit_tree_roots(trans, root); | 933 | ret = btrfs_commit_tree_roots(trans, root); |
936 | BUG_ON(ret); | 934 | BUG_ON(ret); |
937 | 935 | ||