btrfs compression: merge inflate and deflate z_streams
authorSergey Senozhatsky <sergey.senozhatsky@gmail.com>
Mon, 7 Jul 2014 14:38:29 +0000 (23:38 +0900)
committerChris Mason <clm@fb.com>
Wed, 17 Sep 2014 20:37:33 +0000 (13:37 -0700)
commit7880991344f73647fa2222b198cf5cfc10805ac2
tree6a4da88ef232059ba8de77f7715dd274b972e825
parent555e12864063762964433139dee651c5b859a047
btrfs compression: merge inflate and deflate z_streams

`struct workspace' used for zlib compression contains two zlib
z_stream-s: `def_strm' used in zlib_compress_pages(), and `inf_strm'
used in zlib_decompress/zlib_decompress_biovec(). None of these
functions use `inf_strm' and `def_strm' simultaniously, meaning that
for every compress/decompress operation we need only one z_stream
(out of two available).

`inf_strm' and `def_strm' are different in size of ->workspace. For
inflate stream we vmalloc() zlib_inflate_workspacesize() bytes, for
deflate stream - zlib_deflate_workspacesize() bytes. On my system zlib
returns the following workspace sizes, correspondingly: 42312 and 268104
(+ guard pages).

Keep only one `z_stream' in `struct workspace' and use it for both
compression and decompression. Hence, instead of vmalloc() of two
z_stream->worskpace-s, allocate only one of size:
max(zlib_deflate_workspacesize(), zlib_inflate_workspacesize())

Reviewed-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Signed-off-by: Chris Mason <clm@fb.com>
fs/btrfs/zlib.c