OSDN Git Service

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 87bac8f..e650125 100644 (file)
@@ -920,6 +920,7 @@ fail:
 }
 
 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 7db14d3..7091eae 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 9417944..aff105c 100644 (file)
@@ -503,6 +503,7 @@ out:
 }
 
 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 8bb6f19..a5e8f02 100644 (file)
@@ -414,6 +414,7 @@ next:
 }
 
 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 5f17c74..4791e89 100644 (file)
@@ -707,6 +707,8 @@ finish:
 }
 
 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,