]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
btrfs: compression: attach workspace manager to the ops
authorDavid Sterba <dsterba@suse.com>
Tue, 1 Oct 2019 22:53:31 +0000 (00:53 +0200)
committerDavid Sterba <dsterba@suse.com>
Mon, 18 Nov 2019 11:46:57 +0000 (12:46 +0100)
There's a lot of indirection when the generic code calls into
algo-specific callbacks to reach the private workspace manager structure
and back to the generic code.

To simplify that, export the workspace manager for heuristic, LZO and
ZLIB, while ZSTD is going to use it's own manager.

Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Reviewed-by: Nikolay Borisov <nborisov@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/compression.c
fs/btrfs/compression.h
fs/btrfs/lzo.c
fs/btrfs/zlib.c
fs/btrfs/zstd.c

index 87bac8f73a99e73feb214c34267d3945cad24931..e650125b1d2bfa45506639b2f277118ab0e9739c 100644 (file)
@@ -920,6 +920,7 @@ static struct list_head *alloc_heuristic_ws(unsigned int level)
 }
 
 const struct btrfs_compress_op btrfs_heuristic_compress = {
+       .workspace_manager = &heuristic_wsm,
        .init_workspace_manager = heuristic_init_workspace_manager,
        .cleanup_workspace_manager = heuristic_cleanup_workspace_manager,
        .get_workspace = heuristic_get_workspace,
index 7db14d3166b5ecd448d6980866fab2a3d680a12a..7091eae063e559a10e0ca8a02b77fedecce3d722 100644 (file)
@@ -140,6 +140,7 @@ struct btrfs_compress_op {
 
        void (*free_workspace)(struct list_head *workspace);
 
+       struct workspace_manager *workspace_manager;
        /* Maximum level supported by the compression algorithm */
        unsigned int max_level;
        unsigned int default_level;
index 9417944ec829228f5933465010b9316da7969c7a..aff105cc80e7f00e0b53c3f35731b04611f7a7bd 100644 (file)
@@ -503,6 +503,7 @@ int lzo_decompress(struct list_head *ws, unsigned char *data_in,
 }
 
 const struct btrfs_compress_op btrfs_lzo_compress = {
+       .workspace_manager      = &wsm,
        .init_workspace_manager = lzo_init_workspace_manager,
        .cleanup_workspace_manager = lzo_cleanup_workspace_manager,
        .get_workspace          = lzo_get_workspace,
index 8bb6f19ab36923e7108e4ea54bbf1214a203a094..a5e8f020747311e01168f31de1e3238db3dbbcd7 100644 (file)
@@ -414,6 +414,7 @@ int zlib_decompress(struct list_head *ws, unsigned char *data_in,
 }
 
 const struct btrfs_compress_op btrfs_zlib_compress = {
+       .workspace_manager      = &wsm,
        .init_workspace_manager = zlib_init_workspace_manager,
        .cleanup_workspace_manager = zlib_cleanup_workspace_manager,
        .get_workspace          = zlib_get_workspace,
index 5f17c741d167907f2565b831a10efb08eddc72a4..4791e89e43e347397d4ea6f485791399fc24638f 100644 (file)
@@ -707,6 +707,8 @@ int zstd_decompress(struct list_head *ws, unsigned char *data_in,
 }
 
 const struct btrfs_compress_op btrfs_zstd_compress = {
+       /* ZSTD uses own workspace manager */
+       .workspace_manager = NULL,
        .init_workspace_manager = zstd_init_workspace_manager,
        .cleanup_workspace_manager = zstd_cleanup_workspace_manager,
        .get_workspace = zstd_get_workspace,