diff options
author | Josef Bacik <josef@redhat.com> | 2011-08-01 12:08:18 -0400 |
---|---|---|
committer | Josef Bacik <josef@redhat.com> | 2011-10-19 15:12:30 -0400 |
commit | 9e4871070b5f070cacf26525389d56e0345ba156 (patch) | |
tree | cc52193e1d2d12923cdfe2749c3f74102bb9751e /fs/btrfs | |
parent | fb25e9141ab843794d5cdef3936ccb58435e2371 (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.c | 6 |
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 |