aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/extent-tree.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/extent-tree.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/extent-tree.c')
-rw-r--r--fs/btrfs/extent-tree.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 3181759da1cf..c479d71e2869 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -1872,8 +1872,15 @@ static int __btrfs_free_extent(struct btrfs_trans_handle *trans,
1872 return 0; 1872 return 0;
1873 } 1873 }
1874 /* if metadata always pin */ 1874 /* if metadata always pin */
1875 if (owner_objectid < BTRFS_FIRST_FREE_OBJECTID) 1875 if (owner_objectid < BTRFS_FIRST_FREE_OBJECTID) {
1876 if (root->root_key.objectid == BTRFS_TREE_LOG_OBJECTID) {
1877 /* btrfs_free_reserved_extent */
1878 set_extent_dirty(&root->fs_info->free_space_cache,
1879 bytenr, bytenr + num_bytes - 1, GFP_NOFS);
1880 return 0;
1881 }
1876 pin = 1; 1882 pin = 1;
1883 }
1877 1884
1878 /* if data pin when any transaction has committed this */ 1885 /* if data pin when any transaction has committed this */
1879 if (ref_generation != trans->transid) 1886 if (ref_generation != trans->transid)
@@ -2361,11 +2368,13 @@ int btrfs_alloc_extent(struct btrfs_trans_handle *trans,
2361 min_alloc_size, empty_size, hint_byte, 2368 min_alloc_size, empty_size, hint_byte,
2362 search_end, ins, data); 2369 search_end, ins, data);
2363 BUG_ON(ret); 2370 BUG_ON(ret);
2364 ret = __btrfs_alloc_reserved_extent(trans, root, root_objectid, 2371 if (root_objectid != BTRFS_TREE_LOG_OBJECTID) {
2365 ref_generation, owner, 2372 ret = __btrfs_alloc_reserved_extent(trans, root, root_objectid,
2366 owner_offset, ins); 2373 ref_generation, owner,
2367 BUG_ON(ret); 2374 owner_offset, ins);
2375 BUG_ON(ret);
2368 2376
2377 }
2369 maybe_unlock_mutex(root); 2378 maybe_unlock_mutex(root);
2370 return ret; 2379 return ret;
2371} 2380}