Btrfs: Force inlining off in a few places to save stack usage
Signed-off-by: Chris Mason <chris.mason@oracle.com>
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
index 8fa92a2..35c5707 100644
--- a/fs/btrfs/ctree.c
+++ b/fs/btrfs/ctree.c
@@ -548,8 +548,8 @@
return 0;
}
-static int check_block(struct btrfs_root *root, struct btrfs_path *path,
- int level)
+static int noinline check_block(struct btrfs_root *root,
+ struct btrfs_path *path, int level)
{
return 0;
#if 0
@@ -676,8 +676,9 @@
btrfs_level_size(root, btrfs_header_level(parent) - 1));
}
-static int balance_level(struct btrfs_trans_handle *trans, struct btrfs_root
- *root, struct btrfs_path *path, int level)
+static int balance_level(struct btrfs_trans_handle *trans,
+ struct btrfs_root *root,
+ struct btrfs_path *path, int level)
{
struct extent_buffer *right = NULL;
struct extent_buffer *mid;
@@ -868,9 +869,9 @@
}
/* returns zero if the push worked, non-zero otherwise */
-static int push_nodes_for_insert(struct btrfs_trans_handle *trans,
- struct btrfs_root *root,
- struct btrfs_path *path, int level)
+static int noinline push_nodes_for_insert(struct btrfs_trans_handle *trans,
+ struct btrfs_root *root,
+ struct btrfs_path *path, int level)
{
struct extent_buffer *right = NULL;
struct extent_buffer *mid;
@@ -1207,8 +1208,8 @@
* returns 0 if some ptrs were pushed left, < 0 if there was some horrible
* error, and > 0 if there was no room in the left hand block.
*/
-static int push_node_left(struct btrfs_trans_handle *trans, struct btrfs_root
- *root, struct extent_buffer *dst,
+static int push_node_left(struct btrfs_trans_handle *trans,
+ struct btrfs_root *root, struct extent_buffer *dst,
struct extent_buffer *src)
{
int push_items = 0;
@@ -1309,7 +1310,7 @@
*
* returns zero on success or < 0 on failure.
*/
-static int insert_new_root(struct btrfs_trans_handle *trans,
+static int noinline insert_new_root(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct btrfs_path *path, int level)
{
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 54f2b1d..4957cfa 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -162,10 +162,11 @@
return block_group;
return NULL;
}
-static u64 find_search_start(struct btrfs_root *root,
- struct btrfs_block_group_cache **cache_ret,
- u64 search_start, int num,
- int data, int full_scan)
+
+static u64 noinline find_search_start(struct btrfs_root *root,
+ struct btrfs_block_group_cache **cache_ret,
+ u64 search_start, int num,
+ int data, int full_scan)
{
int ret;
struct btrfs_block_group_cache *cache = *cache_ret;
@@ -393,11 +394,12 @@
return ret == 0;
}
-static int lookup_extent_backref(struct btrfs_trans_handle *trans,
- struct btrfs_root *root,
- struct btrfs_path *path, u64 bytenr,
- u64 root_objectid, u64 ref_generation,
- u64 owner, u64 owner_offset, int del)
+static int noinline lookup_extent_backref(struct btrfs_trans_handle *trans,
+ struct btrfs_root *root,
+ struct btrfs_path *path, u64 bytenr,
+ u64 root_objectid,
+ u64 ref_generation, u64 owner,
+ u64 owner_offset, int del)
{
u64 hash;
struct btrfs_key key;
@@ -1116,8 +1118,8 @@
return 0;
}
-static int finish_current_insert(struct btrfs_trans_handle *trans, struct
- btrfs_root *extent_root)
+static int finish_current_insert(struct btrfs_trans_handle *trans,
+ struct btrfs_root *extent_root)
{
u64 start;
u64 end;
@@ -1360,11 +1362,13 @@
* ins->offset == number of blocks
* Any available blocks before search_start are skipped.
*/
-static int find_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root
- *orig_root, u64 num_bytes, u64 empty_size,
- u64 search_start, u64 search_end, u64 hint_byte,
- struct btrfs_key *ins, u64 exclude_start,
- u64 exclude_nr, int data)
+static int noinline find_free_extent(struct btrfs_trans_handle *trans,
+ struct btrfs_root *orig_root,
+ u64 num_bytes, u64 empty_size,
+ u64 search_start, u64 search_end,
+ u64 hint_byte, struct btrfs_key *ins,
+ u64 exclude_start, u64 exclude_nr,
+ int data)
{
struct btrfs_path *path;
struct btrfs_key key;
@@ -1760,8 +1764,9 @@
return buf;
}
-static int drop_leaf_ref(struct btrfs_trans_handle *trans,
- struct btrfs_root *root, struct extent_buffer *leaf)
+static int noinline drop_leaf_ref(struct btrfs_trans_handle *trans,
+ struct btrfs_root *root,
+ struct extent_buffer *leaf)
{
u64 leaf_owner;
u64 leaf_generation;
@@ -1802,8 +1807,8 @@
return 0;
}
-static void reada_walk_down(struct btrfs_root *root,
- struct extent_buffer *node)
+static void noinline reada_walk_down(struct btrfs_root *root,
+ struct extent_buffer *node)
{
int i;
u32 nritems;
@@ -1835,8 +1840,9 @@
* helper function for drop_snapshot, this walks down the tree dropping ref
* counts as it goes.
*/
-static int walk_down_tree(struct btrfs_trans_handle *trans, struct btrfs_root
- *root, struct btrfs_path *path, int *level)
+static int noinline walk_down_tree(struct btrfs_trans_handle *trans,
+ struct btrfs_root *root,
+ struct btrfs_path *path, int *level)
{
u64 root_owner;
u64 root_gen;
@@ -1955,8 +1961,9 @@
* to find the first node higher up where we haven't yet gone through
* all the slots
*/
-static int walk_up_tree(struct btrfs_trans_handle *trans, struct btrfs_root
- *root, struct btrfs_path *path, int *level)
+static int noinline walk_up_tree(struct btrfs_trans_handle *trans,
+ struct btrfs_root *root,
+ struct btrfs_path *path, int *level)
{
u64 root_owner;
u64 root_gen;
@@ -2100,7 +2107,8 @@
return 0;
}
-static int relocate_inode_pages(struct inode *inode, u64 start, u64 len)
+static int noinline relocate_inode_pages(struct inode *inode, u64 start,
+ u64 len)
{
u64 page_start;
u64 page_end;
@@ -2169,7 +2177,7 @@
/*
* note, this releases the path
*/
-static int relocate_one_reference(struct btrfs_root *extent_root,
+static int noinline relocate_one_reference(struct btrfs_root *extent_root,
struct btrfs_path *path,
struct btrfs_key *extent_key)
{
@@ -2268,9 +2276,9 @@
return 0;
}
-static int relocate_one_extent(struct btrfs_root *extent_root,
- struct btrfs_path *path,
- struct btrfs_key *extent_key)
+static int noinline relocate_one_extent(struct btrfs_root *extent_root,
+ struct btrfs_path *path,
+ struct btrfs_key *extent_key)
{
struct btrfs_key key;
struct btrfs_key found_key;
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index 71dc2d3..c9ebd4f 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -80,7 +80,7 @@
}
}
-static int insert_inline_extent(struct btrfs_trans_handle *trans,
+static int noinline insert_inline_extent(struct btrfs_trans_handle *trans,
struct btrfs_root *root, struct inode *inode,
u64 offset, size_t size,
struct page **pages, size_t page_offset,
@@ -221,7 +221,7 @@
return err;
}
-static int dirty_and_release_pages(struct btrfs_trans_handle *trans,
+static int noinline dirty_and_release_pages(struct btrfs_trans_handle *trans,
struct btrfs_root *root,
struct file *file,
struct page **pages,
@@ -653,14 +653,10 @@
/*
* this gets pages into the page cache and locks them down
*/
-static int prepare_pages(struct btrfs_root *root,
- struct file *file,
- struct page **pages,
- size_t num_pages,
- loff_t pos,
- unsigned long first_index,
- unsigned long last_index,
- size_t write_bytes)
+static int prepare_pages(struct btrfs_root *root, struct file *file,
+ struct page **pages, size_t num_pages,
+ loff_t pos, unsigned long first_index,
+ unsigned long last_index, size_t write_bytes)
{
int i;
unsigned long index = pos >> PAGE_CACHE_SHIFT;