aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2009-03-12 20:12:45 -0400
committerChris Mason <chris.mason@oracle.com>2009-03-24 16:14:27 -0400
commit7f366cfecfc126731f8ac505d72026d691dac79a (patch)
tree72541fb0c7c891989c2d279c4e26beea2abbca73 /fs/btrfs
parentb7ec40d7845bffca8bb3af2ea3f192d6257bbe21 (diff)
Btrfs: reduce stack in cow_file_range
The fs/btrfs/inode.c code to run delayed allocation during writout needed some stack usage optimization. This is the first pass, it does the check for compression earlier on, which allows us to do the common (no compression) case higher up in the call chain. Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs')
-rw-r--r--fs/btrfs/inode.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 13a17477c4f4..c427011dc453 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -204,7 +204,7 @@ fail:
204 * does the checks required to make sure the data is small enough 204 * does the checks required to make sure the data is small enough
205 * to fit as an inline extent. 205 * to fit as an inline extent.
206 */ 206 */
207static int cow_file_range_inline(struct btrfs_trans_handle *trans, 207static noinline int cow_file_range_inline(struct btrfs_trans_handle *trans,
208 struct btrfs_root *root, 208 struct btrfs_root *root,
209 struct inode *inode, u64 start, u64 end, 209 struct inode *inode, u64 start, u64 end,
210 size_t compressed_size, 210 size_t compressed_size,
@@ -854,11 +854,6 @@ static int cow_file_range_async(struct inode *inode, struct page *locked_page,
854 u64 cur_end; 854 u64 cur_end;
855 int limit = 10 * 1024 * 1042; 855 int limit = 10 * 1024 * 1042;
856 856
857 if (!btrfs_test_opt(root, COMPRESS)) {
858 return cow_file_range(inode, locked_page, start, end,
859 page_started, nr_written, 1);
860 }
861
862 clear_extent_bit(&BTRFS_I(inode)->io_tree, start, end, EXTENT_LOCKED | 857 clear_extent_bit(&BTRFS_I(inode)->io_tree, start, end, EXTENT_LOCKED |
863 EXTENT_DELALLOC, 1, 0, GFP_NOFS); 858 EXTENT_DELALLOC, 1, 0, GFP_NOFS);
864 while (start < end) { 859 while (start < end) {
@@ -935,7 +930,8 @@ static noinline int csum_exist_in_range(struct btrfs_root *root,
935 * If no cow copies or snapshots exist, we write directly to the existing 930 * If no cow copies or snapshots exist, we write directly to the existing
936 * blocks on disk 931 * blocks on disk
937 */ 932 */
938static int run_delalloc_nocow(struct inode *inode, struct page *locked_page, 933static noinline int run_delalloc_nocow(struct inode *inode,
934 struct page *locked_page,
939 u64 start, u64 end, int *page_started, int force, 935 u64 start, u64 end, int *page_started, int force,
940 unsigned long *nr_written) 936 unsigned long *nr_written)
941{ 937{
@@ -1133,6 +1129,7 @@ static int run_delalloc_range(struct inode *inode, struct page *locked_page,
1133 unsigned long *nr_written) 1129 unsigned long *nr_written)
1134{ 1130{
1135 int ret; 1131 int ret;
1132 struct btrfs_root *root = BTRFS_I(inode)->root;
1136 1133
1137 if (btrfs_test_flag(inode, NODATACOW)) 1134 if (btrfs_test_flag(inode, NODATACOW))
1138 ret = run_delalloc_nocow(inode, locked_page, start, end, 1135 ret = run_delalloc_nocow(inode, locked_page, start, end,
@@ -1140,10 +1137,12 @@ static int run_delalloc_range(struct inode *inode, struct page *locked_page,
1140 else if (btrfs_test_flag(inode, PREALLOC)) 1137 else if (btrfs_test_flag(inode, PREALLOC))
1141 ret = run_delalloc_nocow(inode, locked_page, start, end, 1138 ret = run_delalloc_nocow(inode, locked_page, start, end,
1142 page_started, 0, nr_written); 1139 page_started, 0, nr_written);
1140 else if (!btrfs_test_opt(root, COMPRESS))
1141 ret = cow_file_range(inode, locked_page, start, end,
1142 page_started, nr_written, 1);
1143 else 1143 else
1144 ret = cow_file_range_async(inode, locked_page, start, end, 1144 ret = cow_file_range_async(inode, locked_page, start, end,
1145 page_started, nr_written); 1145 page_started, nr_written);
1146
1147 return ret; 1146 return ret;
1148} 1147}
1149 1148