diff options
author | Yan, Zheng <zheng.yan@oracle.com> | 2010-05-16 10:49:59 -0400 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2010-05-25 10:34:54 -0400 |
commit | 3fd0a5585eb98e074fb9934549c8d85c49756c0d (patch) | |
tree | 3e7ff9bd9678a5eea62818a2f4a50e19dda91a81 /fs/btrfs/ctree.c | |
parent | efa56464562991b8c24f965199888806bd8c4b38 (diff) |
Btrfs: Metadata ENOSPC handling for balance
This patch adds metadata ENOSPC handling for the balance code.
It is consisted by following major changes:
1. Avoid COW tree leave in the phrase of merging tree.
2. Handle interaction with snapshot creation.
3. make the backref cache can live across transactions.
Signed-off-by: Yan Zheng <zheng.yan@oracle.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/ctree.c')
-rw-r--r-- | fs/btrfs/ctree.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index 6bee8e5204fb..acd532af8e55 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c | |||
@@ -447,6 +447,9 @@ static noinline int __btrfs_cow_block(struct btrfs_trans_handle *trans, | |||
447 | 447 | ||
448 | update_ref_for_cow(trans, root, buf, cow, &last_ref); | 448 | update_ref_for_cow(trans, root, buf, cow, &last_ref); |
449 | 449 | ||
450 | if (root->ref_cows) | ||
451 | btrfs_reloc_cow_block(trans, root, buf, cow); | ||
452 | |||
450 | if (buf == root->node) { | 453 | if (buf == root->node) { |
451 | WARN_ON(parent && parent != buf); | 454 | WARN_ON(parent && parent != buf); |
452 | if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID || | 455 | if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID || |