aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/tree-log.c
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2008-09-11 15:54:42 -0400
committerChris Mason <chris.mason@oracle.com>2008-09-25 11:04:07 -0400
commitd00aff00139b40f2e9c60299d76aac29d72e48ba (patch)
tree3ef3d84c42dc809cd92ab6339abd968fdede357d /fs/btrfs/tree-log.c
parent3a5f1d458ad1610a06e38f0be2fbc6ac215439c0 (diff)
Btrfs: Optimize tree log block allocations
Since tree log blocks get freed every transaction, they never really need to be written to disk. This skips the step where we update metadata to record they were allocated. Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/tree-log.c')
-rw-r--r--fs/btrfs/tree-log.c20
1 files changed, 7 insertions, 13 deletions
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index f43ee33ec2dc..5f77bee0f846 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -1728,9 +1728,8 @@ static int noinline walk_down_log_tree(struct btrfs_trans_handle *trans,
1728 1728
1729 WARN_ON(root_owner != 1729 WARN_ON(root_owner !=
1730 BTRFS_TREE_LOG_OBJECTID); 1730 BTRFS_TREE_LOG_OBJECTID);
1731 ret = btrfs_free_extent(trans, root, bytenr, 1731 ret = btrfs_free_reserved_extent(root,
1732 blocksize, root_owner, 1732 bytenr, blocksize);
1733 root_gen, 0, 0, 1);
1734 BUG_ON(ret); 1733 BUG_ON(ret);
1735 } 1734 }
1736 free_extent_buffer(next); 1735 free_extent_buffer(next);
@@ -1775,8 +1774,7 @@ static int noinline walk_down_log_tree(struct btrfs_trans_handle *trans,
1775 BUG_ON(ret); 1774 BUG_ON(ret);
1776 } 1775 }
1777 WARN_ON(root_owner != BTRFS_TREE_LOG_OBJECTID); 1776 WARN_ON(root_owner != BTRFS_TREE_LOG_OBJECTID);
1778 ret = btrfs_free_extent(trans, root, bytenr, blocksize, 1777 ret = btrfs_free_reserved_extent(root, bytenr, blocksize);
1779 root_owner, root_gen, 0, 0, 1);
1780 BUG_ON(ret); 1778 BUG_ON(ret);
1781 } 1779 }
1782 free_extent_buffer(path->nodes[*level]); 1780 free_extent_buffer(path->nodes[*level]);
@@ -1837,10 +1835,9 @@ static int noinline walk_up_log_tree(struct btrfs_trans_handle *trans,
1837 } 1835 }
1838 1836
1839 WARN_ON(root_owner != BTRFS_TREE_LOG_OBJECTID); 1837 WARN_ON(root_owner != BTRFS_TREE_LOG_OBJECTID);
1840 ret = btrfs_free_extent(trans, root, 1838 ret = btrfs_free_reserved_extent(root,
1841 path->nodes[*level]->start, 1839 path->nodes[*level]->start,
1842 path->nodes[*level]->len, 1840 path->nodes[*level]->len);
1843 root_owner, root_gen, 0, 0, 1);
1844 BUG_ON(ret); 1841 BUG_ON(ret);
1845 } 1842 }
1846 free_extent_buffer(path->nodes[*level]); 1843 free_extent_buffer(path->nodes[*level]);
@@ -1910,11 +1907,8 @@ static int walk_log_tree(struct btrfs_trans_handle *trans,
1910 } 1907 }
1911 WARN_ON(log->root_key.objectid != 1908 WARN_ON(log->root_key.objectid !=
1912 BTRFS_TREE_LOG_OBJECTID); 1909 BTRFS_TREE_LOG_OBJECTID);
1913 ret = btrfs_free_extent(trans, log, 1910 ret = btrfs_free_reserved_extent(log, next->start,
1914 next->start, next->len, 1911 next->len);
1915 log->root_key.objectid,
1916 btrfs_header_generation(next),
1917 0, 0, 1);
1918 BUG_ON(ret); 1912 BUG_ON(ret);
1919 } 1913 }
1920 } 1914 }