• Sergey Senozhatsky's avatar
    btrfs compression: merge inflate and deflate z_streams · 78809913
    Sergey Senozhatsky authored
    `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: default avatarDavid Sterba <dsterba@suse.cz>
    Signed-off-by: default avatarSergey Senozhatsky <sergey.senozhatsky@gmail.com>
    Signed-off-by: default avatarChris Mason <clm@fb.com>
    78809913
zlib.c 10 KB