mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-21 00:10:09 +00:00
btrfs: merge length input and output parameter in compress_pages
The length parameter is basically duplicated for input and output in the top level caller of the compress_pages chain. We can simply use one variable for that and reduce stack consumption. The compression implementation will sink the parameter to a local variable so everything works as before. Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
52f75f4fe7
commit
38c3146408
5 changed files with 18 additions and 20 deletions
|
@ -911,27 +911,25 @@ static void free_workspaces(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* given an address space and start/len, compress the bytes.
|
* Given an address space and start and length, compress the bytes into @pages
|
||||||
|
* that are allocated on demand.
|
||||||
*
|
*
|
||||||
* pages are allocated to hold the compressed result and stored
|
* @out_pages is used to return the number of pages allocated. There
|
||||||
* in 'pages'
|
* may be pages allocated even if we return an error.
|
||||||
*
|
*
|
||||||
* out_pages is used to return the number of pages allocated. There
|
* @total_in is used to return the number of bytes actually read. It
|
||||||
* may be pages allocated even if we return an error
|
* may be smaller than the input length if we had to exit early because we
|
||||||
*
|
|
||||||
* total_in is used to return the number of bytes actually read. It
|
|
||||||
* may be smaller then len if we had to exit early because we
|
|
||||||
* ran out of room in the pages array or because we cross the
|
* ran out of room in the pages array or because we cross the
|
||||||
* max_out threshold.
|
* max_out threshold.
|
||||||
*
|
*
|
||||||
* total_out is used to return the total number of compressed bytes
|
* @total_out is an in/out parameter, must be set to the input length and will
|
||||||
|
* be also used to return the total number of compressed bytes
|
||||||
*
|
*
|
||||||
* max_out tells us the max number of bytes that we're allowed to
|
* @max_out tells us the max number of bytes that we're allowed to
|
||||||
* stuff into pages
|
* stuff into pages
|
||||||
*/
|
*/
|
||||||
int btrfs_compress_pages(int type, struct address_space *mapping,
|
int btrfs_compress_pages(int type, struct address_space *mapping,
|
||||||
u64 start, unsigned long len,
|
u64 start, struct page **pages,
|
||||||
struct page **pages,
|
|
||||||
unsigned long nr_dest_pages,
|
unsigned long nr_dest_pages,
|
||||||
unsigned long *out_pages,
|
unsigned long *out_pages,
|
||||||
unsigned long *total_in,
|
unsigned long *total_in,
|
||||||
|
@ -944,7 +942,7 @@ int btrfs_compress_pages(int type, struct address_space *mapping,
|
||||||
workspace = find_workspace(type);
|
workspace = find_workspace(type);
|
||||||
|
|
||||||
ret = btrfs_compress_op[type-1]->compress_pages(workspace, mapping,
|
ret = btrfs_compress_op[type-1]->compress_pages(workspace, mapping,
|
||||||
start, len, pages,
|
start, pages,
|
||||||
nr_dest_pages, out_pages,
|
nr_dest_pages, out_pages,
|
||||||
total_in, total_out,
|
total_in, total_out,
|
||||||
max_out);
|
max_out);
|
||||||
|
|
|
@ -23,8 +23,7 @@ void btrfs_init_compress(void);
|
||||||
void btrfs_exit_compress(void);
|
void btrfs_exit_compress(void);
|
||||||
|
|
||||||
int btrfs_compress_pages(int type, struct address_space *mapping,
|
int btrfs_compress_pages(int type, struct address_space *mapping,
|
||||||
u64 start, unsigned long len,
|
u64 start, struct page **pages,
|
||||||
struct page **pages,
|
|
||||||
unsigned long nr_dest_pages,
|
unsigned long nr_dest_pages,
|
||||||
unsigned long *out_pages,
|
unsigned long *out_pages,
|
||||||
unsigned long *total_in,
|
unsigned long *total_in,
|
||||||
|
@ -59,7 +58,7 @@ struct btrfs_compress_op {
|
||||||
|
|
||||||
int (*compress_pages)(struct list_head *workspace,
|
int (*compress_pages)(struct list_head *workspace,
|
||||||
struct address_space *mapping,
|
struct address_space *mapping,
|
||||||
u64 start, unsigned long len,
|
u64 start,
|
||||||
struct page **pages,
|
struct page **pages,
|
||||||
unsigned long nr_dest_pages,
|
unsigned long nr_dest_pages,
|
||||||
unsigned long *out_pages,
|
unsigned long *out_pages,
|
||||||
|
|
|
@ -517,7 +517,7 @@ static noinline void compress_file_range(struct inode *inode,
|
||||||
redirty = 1;
|
redirty = 1;
|
||||||
ret = btrfs_compress_pages(compress_type,
|
ret = btrfs_compress_pages(compress_type,
|
||||||
inode->i_mapping, start,
|
inode->i_mapping, start,
|
||||||
total_compressed, pages,
|
pages,
|
||||||
nr_pages, &nr_pages_ret,
|
nr_pages, &nr_pages_ret,
|
||||||
&total_in,
|
&total_in,
|
||||||
&total_compressed,
|
&total_compressed,
|
||||||
|
|
|
@ -86,7 +86,7 @@ static inline size_t read_compress_length(const char *buf)
|
||||||
|
|
||||||
static int lzo_compress_pages(struct list_head *ws,
|
static int lzo_compress_pages(struct list_head *ws,
|
||||||
struct address_space *mapping,
|
struct address_space *mapping,
|
||||||
u64 start, unsigned long len,
|
u64 start,
|
||||||
struct page **pages,
|
struct page **pages,
|
||||||
unsigned long nr_dest_pages,
|
unsigned long nr_dest_pages,
|
||||||
unsigned long *out_pages,
|
unsigned long *out_pages,
|
||||||
|
@ -102,7 +102,7 @@ static int lzo_compress_pages(struct list_head *ws,
|
||||||
struct page *in_page = NULL;
|
struct page *in_page = NULL;
|
||||||
struct page *out_page = NULL;
|
struct page *out_page = NULL;
|
||||||
unsigned long bytes_left;
|
unsigned long bytes_left;
|
||||||
|
unsigned long len = *total_out;
|
||||||
size_t in_len;
|
size_t in_len;
|
||||||
size_t out_len;
|
size_t out_len;
|
||||||
char *buf;
|
char *buf;
|
||||||
|
|
|
@ -73,7 +73,7 @@ static struct list_head *zlib_alloc_workspace(void)
|
||||||
|
|
||||||
static int zlib_compress_pages(struct list_head *ws,
|
static int zlib_compress_pages(struct list_head *ws,
|
||||||
struct address_space *mapping,
|
struct address_space *mapping,
|
||||||
u64 start, unsigned long len,
|
u64 start,
|
||||||
struct page **pages,
|
struct page **pages,
|
||||||
unsigned long nr_dest_pages,
|
unsigned long nr_dest_pages,
|
||||||
unsigned long *out_pages,
|
unsigned long *out_pages,
|
||||||
|
@ -89,6 +89,7 @@ static int zlib_compress_pages(struct list_head *ws,
|
||||||
struct page *in_page = NULL;
|
struct page *in_page = NULL;
|
||||||
struct page *out_page = NULL;
|
struct page *out_page = NULL;
|
||||||
unsigned long bytes_left;
|
unsigned long bytes_left;
|
||||||
|
unsigned long len = *total_out;
|
||||||
|
|
||||||
*out_pages = 0;
|
*out_pages = 0;
|
||||||
*total_out = 0;
|
*total_out = 0;
|
||||||
|
|
Loading…
Reference in a new issue