summaryrefslogtreecommitdiff
path: root/fs/btrfs/zlib.c
diff options
context:
space:
mode:
authorDennis Zhou <dennis@kernel.org>2019-02-04 23:20:05 +0300
committerDavid Sterba <dsterba@suse.com>2019-02-25 16:13:32 +0300
commitd0ab62ce2ded36294f3a02156415b8157d660b95 (patch)
treea006f0e8aeb45c23b45a405ef9ae1bf630476eae /fs/btrfs/zlib.c
parent7bf4994304e27454c5cf99de1d43033cb29b34fd (diff)
downloadlinux-d0ab62ce2ded36294f3a02156415b8157d660b95.tar.xz
btrfs: change set_level() to bound the level passed in
Currently, the only user of set_level() is zlib which sets an internal workspace parameter. As level is now plumbed into get_workspace(), this can be handled there rather than separately. This repurposes set_level() to bound the level passed in so it can be used when setting the mounts compression level and as well as verifying the level before getting a workspace. The other benefit is this divides the meaning of compress(0) and get_workspace(0). The former means we want to use the default compression level of the compression type. The latter means we can use any workspace available. Signed-off-by: Dennis Zhou <dennis@kernel.org> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/zlib.c')
-rw-r--r--fs/btrfs/zlib.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/fs/btrfs/zlib.c b/fs/btrfs/zlib.c
index fc883a14ecbf..b86b7ad6b900 100644
--- a/fs/btrfs/zlib.c
+++ b/fs/btrfs/zlib.c
@@ -41,7 +41,12 @@ static void zlib_cleanup_workspace_manager(void)
static struct list_head *zlib_get_workspace(unsigned int level)
{
- return btrfs_get_workspace(&wsm, level);
+ struct list_head *ws = btrfs_get_workspace(&wsm, level);
+ struct workspace *workspace = list_entry(ws, struct workspace, list);
+
+ workspace->level = level;
+
+ return ws;
}
static void zlib_put_workspace(struct list_head *ws)
@@ -413,15 +418,12 @@ next:
return ret;
}
-static void zlib_set_level(struct list_head *ws, unsigned int type)
+static unsigned int zlib_set_level(unsigned int level)
{
- struct workspace *workspace = list_entry(ws, struct workspace, list);
- unsigned int level = btrfs_compress_level(type);
-
- if (level > 9)
- level = 9;
+ if (!level)
+ return BTRFS_ZLIB_DEFAULT_LEVEL;
- workspace->level = level > 0 ? level : 3;
+ return min_t(unsigned int, level, 9);
}
const struct btrfs_compress_op btrfs_zlib_compress = {