Skip to content

Commit

Permalink
btrfs: merge length input and output parameter in compress_pages
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
David Sterba committed Feb 28, 2017
1 parent 52f75f4 commit 38c3146
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 20 deletions.
24 changes: 11 additions & 13 deletions fs/btrfs/compression.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
* in 'pages'
* @out_pages is used to return the number of pages allocated. There
* may be pages allocated even if we return an error.
*
* out_pages is used to return the number of pages allocated. There
* may be pages allocated even if we return an error
*
* 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
* @total_in is used to return the number of bytes actually read. It
* may be smaller than the input length if we had to exit early because we
* ran out of room in the pages array or because we cross the
* 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
*/
int btrfs_compress_pages(int type, struct address_space *mapping,
u64 start, unsigned long len,
struct page **pages,
u64 start, struct page **pages,
unsigned long nr_dest_pages,
unsigned long *out_pages,
unsigned long *total_in,
Expand All @@ -944,7 +942,7 @@ int btrfs_compress_pages(int type, struct address_space *mapping,
workspace = find_workspace(type);

ret = btrfs_compress_op[type-1]->compress_pages(workspace, mapping,
start, len, pages,
start, pages,
nr_dest_pages, out_pages,
total_in, total_out,
max_out);
Expand Down
5 changes: 2 additions & 3 deletions fs/btrfs/compression.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@ void btrfs_init_compress(void);
void btrfs_exit_compress(void);

int btrfs_compress_pages(int type, struct address_space *mapping,
u64 start, unsigned long len,
struct page **pages,
u64 start, struct page **pages,
unsigned long nr_dest_pages,
unsigned long *out_pages,
unsigned long *total_in,
Expand Down Expand Up @@ -59,7 +58,7 @@ struct btrfs_compress_op {

int (*compress_pages)(struct list_head *workspace,
struct address_space *mapping,
u64 start, unsigned long len,
u64 start,
struct page **pages,
unsigned long nr_dest_pages,
unsigned long *out_pages,
Expand Down
2 changes: 1 addition & 1 deletion fs/btrfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -517,7 +517,7 @@ static noinline void compress_file_range(struct inode *inode,
redirty = 1;
ret = btrfs_compress_pages(compress_type,
inode->i_mapping, start,
total_compressed, pages,
pages,
nr_pages, &nr_pages_ret,
&total_in,
&total_compressed,
Expand Down
4 changes: 2 additions & 2 deletions fs/btrfs/lzo.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ static inline size_t read_compress_length(const char *buf)

static int lzo_compress_pages(struct list_head *ws,
struct address_space *mapping,
u64 start, unsigned long len,
u64 start,
struct page **pages,
unsigned long nr_dest_pages,
unsigned long *out_pages,
Expand All @@ -102,7 +102,7 @@ static int lzo_compress_pages(struct list_head *ws,
struct page *in_page = NULL;
struct page *out_page = NULL;
unsigned long bytes_left;

unsigned long len = *total_out;
size_t in_len;
size_t out_len;
char *buf;
Expand Down
3 changes: 2 additions & 1 deletion fs/btrfs/zlib.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ static struct list_head *zlib_alloc_workspace(void)

static int zlib_compress_pages(struct list_head *ws,
struct address_space *mapping,
u64 start, unsigned long len,
u64 start,
struct page **pages,
unsigned long nr_dest_pages,
unsigned long *out_pages,
Expand All @@ -89,6 +89,7 @@ static int zlib_compress_pages(struct list_head *ws,
struct page *in_page = NULL;
struct page *out_page = NULL;
unsigned long bytes_left;
unsigned long len = *total_out;

*out_pages = 0;
*total_out = 0;
Expand Down

0 comments on commit 38c3146

Please sign in to comment.