aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs
diff options
context:
space:
mode:
authorJosef Bacik <josef@redhat.com>2011-08-01 12:08:18 -0400
committerJosef Bacik <josef@redhat.com>2011-10-19 15:12:30 -0400
commit9e4871070b5f070cacf26525389d56e0345ba156 (patch)
treecc52193e1d2d12923cdfe2749c3f74102bb9751e /fs/btrfs
parentfb25e9141ab843794d5cdef3936ccb58435e2371 (diff)
Btrfs: skip looking for delalloc if we don't have ->fill_delalloc
We always look for delalloc bytes in our io_tree so we can fill in delalloc. This is fine in most cases, but if we're writing out the btree_inode this is just a superfluous tree search on the io_tree, and if we have a lot of metadata dirty this could be an expensive check. So instead check to see if our io_tree has a ->fill_delalloc op, and if not don't even bother doing the lookup. Thanks, Signed-off-by: Josef Bacik <josef@redhat.com>
Diffstat (limited to 'fs/btrfs')
-rw-r--r--fs/btrfs/extent_io.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index d418164a35f1..7d5e55632809 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -2136,6 +2136,7 @@ static int __extent_writepage(struct page *page, struct writeback_control *wbc,
2136 int compressed; 2136 int compressed;
2137 int write_flags; 2137 int write_flags;
2138 unsigned long nr_written = 0; 2138 unsigned long nr_written = 0;
2139 bool fill_delalloc = true;
2139 2140
2140 if (wbc->sync_mode == WB_SYNC_ALL) 2141 if (wbc->sync_mode == WB_SYNC_ALL)
2141 write_flags = WRITE_SYNC; 2142 write_flags = WRITE_SYNC;
@@ -2166,10 +2167,13 @@ static int __extent_writepage(struct page *page, struct writeback_control *wbc,
2166 2167
2167 set_page_extent_mapped(page); 2168 set_page_extent_mapped(page);
2168 2169
2170 if (!tree->ops || !tree->ops->fill_delalloc)
2171 fill_delalloc = false;
2172
2169 delalloc_start = start; 2173 delalloc_start = start;
2170 delalloc_end = 0; 2174 delalloc_end = 0;
2171 page_started = 0; 2175 page_started = 0;
2172 if (!epd->extent_locked) { 2176 if (!epd->extent_locked && fill_delalloc) {
2173 u64 delalloc_to_write = 0; 2177 u64 delalloc_to_write = 0;
2174 /* 2178 /*
2175 * make sure the wbc mapping index is at least updated 2179 * make sure the wbc mapping index is at least updated