On Wed, Aug 21, 2019 at 06:16:27PM +0800, Anand Jain wrote: > On 21/8/19 12:17 AM, David Sterba wrote: > > The set_level callbacks do not do anything special and can be replaced > > by a helper that uses the levels defined in the tables. > > > > Signed-off-by: David Sterba <[email protected]> > > --- > > fs/btrfs/compression.c | 20 ++++++++++++++++++-- > > fs/btrfs/compression.h | 9 ++------- > > fs/btrfs/lzo.c | 6 ------ > > fs/btrfs/zlib.c | 9 --------- > > fs/btrfs/zstd.c | 9 --------- > > 5 files changed, 20 insertions(+), 33 deletions(-) > > > > diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c > > index 60c47b417a4b..53376c640f61 100644 > > --- a/fs/btrfs/compression.c > > +++ b/fs/btrfs/compression.c > > @@ -1039,7 +1039,7 @@ int btrfs_compress_pages(unsigned int type_level, > > struct address_space *mapping, > > struct list_head *workspace; > > int ret; > > > > - level = btrfs_compress_op[type]->set_level(level); > > + level = btrfs_compress_set_level(type, level); > > workspace = get_workspace(type, level); > > ret = btrfs_compress_op[type]->compress_pages(workspace, mapping, > > start, pages, > > @@ -1611,7 +1611,23 @@ unsigned int btrfs_compress_str2level(unsigned int > > type, const char *str) > > level = 0; > > } > > > > - level = btrfs_compress_op[type]->set_level(level); > > + level = btrfs_compress_set_level(type, level); > > + > > + return level; > > +} > > + > > +/* > > + * Adjust @level according to the limits of the compression algorithm or > > + * fallback to default > > + */ > > +unsigned int btrfs_compress_get_level(int type, unsigned level) > > +{ > > + const struct btrfs_compress_op *ops = btrfs_compress_op[type]; > > + > > + if (level == 0) > > + level = ops->default_level; > > + else > > + level = min(level, ops->max_level); > > > > return level; > > } > > diff --git a/fs/btrfs/compression.h b/fs/btrfs/compression.h > > index cffd689adb6e..4cb8be9ff88b 100644 > > --- a/fs/btrfs/compression.h > > +++ b/fs/btrfs/compression.h > > @@ -156,13 +156,6 @@ struct btrfs_compress_op { > > unsigned long start_byte, > > size_t srclen, size_t destlen); > > > > - /* > > - * This bounds the level set by the user to be within range of a > > - * particular compression type. It returns the level that will be used > > - * if the level is out of bounds or the default if 0 is passed in. > > - */ > > - unsigned int (*set_level)(unsigned int level); > > - > > /* Maximum level supported by the compression algorithm */ > > unsigned int max_level; > > unsigned int default_level; > > @@ -179,6 +172,8 @@ extern const struct btrfs_compress_op > > btrfs_zstd_compress; > > const char* btrfs_compress_type2str(enum btrfs_compression_type type); > > bool btrfs_compress_is_valid_type(const char *str, size_t len); > > > > +unsigned int btrfs_compress_set_level(int type, unsigned level); > > + > > btrfs_compress_set_level() is undefined.
Indeed, by some mistake the function is named btrfs_compress_get_level and my compiler does not care to fail the build.
