btrfs: move to function pointers for get/put workspaces
The previous patch added generic helpers for get_workspace() and put_workspace(). Now, we can migrate ownership of the workspace_manager to be in the compression type code as the compression code itself doesn't care beyond being able to get a workspace. The init/cleanup and get/put methods are abstracted so each compression algorithm can decide how they want to manage their workspaces. Reviewed-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: Dennis Zhou <dennis@kernel.org> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:

committed by
David Sterba

parent
929f4baf93
commit
92ee553036
@@ -107,7 +107,33 @@ enum btrfs_compression_type {
|
||||
BTRFS_COMPRESS_TYPES = 3,
|
||||
};
|
||||
|
||||
struct workspace_manager {
|
||||
const struct btrfs_compress_op *ops;
|
||||
struct list_head idle_ws;
|
||||
spinlock_t ws_lock;
|
||||
/* Number of free workspaces */
|
||||
int free_ws;
|
||||
/* Total number of allocated workspaces */
|
||||
atomic_t total_ws;
|
||||
/* Waiters for a free workspace */
|
||||
wait_queue_head_t ws_wait;
|
||||
};
|
||||
|
||||
void btrfs_init_workspace_manager(struct workspace_manager *wsm,
|
||||
const struct btrfs_compress_op *ops);
|
||||
struct list_head *btrfs_get_workspace(struct workspace_manager *wsm);
|
||||
void btrfs_put_workspace(struct workspace_manager *wsm, struct list_head *ws);
|
||||
void btrfs_cleanup_workspace_manager(struct workspace_manager *wsm);
|
||||
|
||||
struct btrfs_compress_op {
|
||||
void (*init_workspace_manager)(void);
|
||||
|
||||
void (*cleanup_workspace_manager)(void);
|
||||
|
||||
struct list_head *(*get_workspace)(void);
|
||||
|
||||
void (*put_workspace)(struct list_head *ws);
|
||||
|
||||
struct list_head *(*alloc_workspace)(void);
|
||||
|
||||
void (*free_workspace)(struct list_head *workspace);
|
||||
|
Reference in New Issue
Block a user