---- 在 星期一, 2019-10-07 07:28:32 David Sterba <dste...@suse.cz> 撰写 ---- > On Sat, Oct 05, 2019 at 01:17:35PM +0800, Chengguang Xu wrote: > > Let BTRFS_COMPRESS_TYPES represents the total number > > of cmpressoin types and fix related calling places. > > It will be more safe when adding new compression type > > in the future. > > I think we're not going to add a new type anytime soon, zstd provides > the choice between fast and good ratio. This itself is not an objection > to your patch but is not IMO the true reason for the changes. > > Can you please describe the motivation behind the patches? Eg. if it's a > general cleanup or if there are other changes planned on top.
Actually, it's just a general cleanup. I found another enum in btrfs code for RAID types and I think that usage makes me(at least :-)) easy to understand the code. So the motivation is to keep code style consistency and make the code a bit more readable. > > > Signed-off-by: Chengguang Xu <cgxu...@mykernel.net> > > --- > > fs/btrfs/compression.c | 2 ++ > > fs/btrfs/compression.h | 12 ++++++------ > > fs/btrfs/ioctl.c | 2 +- > > fs/btrfs/tree-checker.c | 4 ++-- > > 4 files changed, 11 insertions(+), 9 deletions(-) > > > > diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c > > index d70c46407420..93deaf0cc2b8 100644 > > --- a/fs/btrfs/compression.c > > +++ b/fs/btrfs/compression.c > > @@ -39,6 +39,8 @@ const char* btrfs_compress_type2str(enum > > btrfs_compression_type type) > > case BTRFS_COMPRESS_ZSTD: > > case BTRFS_COMPRESS_NONE: > > return btrfs_compress_types[type]; > > + default: > > + break; > > } > > > > return NULL; > > diff --git a/fs/btrfs/compression.h b/fs/btrfs/compression.h > > index dd392278ab3f..091ff3f986e5 100644 > > --- a/fs/btrfs/compression.h > > +++ b/fs/btrfs/compression.h > > @@ -101,11 +101,11 @@ blk_status_t btrfs_submit_compressed_read(struct > > inode *inode, struct bio *bio, > > unsigned int btrfs_compress_str2level(unsigned int type, const char *str); > > > > enum btrfs_compression_type { > > - BTRFS_COMPRESS_NONE = 0, > > - BTRFS_COMPRESS_ZLIB = 1, > > - BTRFS_COMPRESS_LZO = 2, > > - BTRFS_COMPRESS_ZSTD = 3, > > - BTRFS_COMPRESS_TYPES = 3, > > + BTRFS_COMPRESS_NONE, > > + BTRFS_COMPRESS_ZLIB, > > + BTRFS_COMPRESS_LZO, > > + BTRFS_COMPRESS_ZSTD, > > + BTRFS_COMPRESS_TYPES > > Please note that the on-disk format values should be expressed by the > values, even if it's the same as the automatic enum assignments. I'll fix in v2. > > Regarding change of the BTRFS_COMPRESS_TYPES value, I vaguely remember > we had patches for that but I don't recall why it was not changed. The > progs have an extra BTRFS_COMPRESS_LAST (== 4) that would be used the > same way as you do in this patch. In previous patch, we had compression type(1-3, skip 0) in the code, so there may be a bit of confusion for BTRFS_COMPRESS_TYPES(==4) . I think it's not a problem now but maybe change name to BTRFS_NR_COMPRESS_TYPES(like RAID type enum) is better. > > BTRFS_COMPRESS_* is not in the public API so changing the value should > be safe, but needs double checking. > > > }; > > > > struct workspace_manager { > > @@ -163,7 +163,7 @@ struct btrfs_compress_op { > > }; > > > > /* The heuristic workspaces are managed via the 0th workspace manager */ > > -#define BTRFS_NR_WORKSPACE_MANAGERS (BTRFS_COMPRESS_TYPES + 1) > > +#define BTRFS_NR_WORKSPACE_MANAGERS BTRFS_COMPRESS_TYPES > > > > extern const struct btrfs_compress_op btrfs_heuristic_compress; > > extern const struct btrfs_compress_op btrfs_zlib_compress; > > diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c > > index de730e56d3f5..8c7196ed7ae0 100644 > > --- a/fs/btrfs/ioctl.c > > +++ b/fs/btrfs/ioctl.c > > @@ -1411,7 +1411,7 @@ int btrfs_defrag_file(struct inode *inode, struct > > file *file, > > return -EINVAL; > > > > if (do_compress) { > > - if (range->compress_type > BTRFS_COMPRESS_TYPES) > > + if (range->compress_type >= BTRFS_COMPRESS_TYPES) > > return -EINVAL; > > if (range->compress_type) > > compress_type = range->compress_type; > > diff --git a/fs/btrfs/tree-checker.c b/fs/btrfs/tree-checker.c > > index f28f9725cef1..2d91c34bbf63 100644 > > --- a/fs/btrfs/tree-checker.c > > +++ b/fs/btrfs/tree-checker.c > > @@ -168,11 +168,11 @@ static int check_extent_data_item(struct > > extent_buffer *leaf, > > * Support for new compression/encryption must introduce incompat > > flag, > > * and must be caught in open_ctree(). > > */ > > - if (btrfs_file_extent_compression(leaf, fi) > BTRFS_COMPRESS_TYPES) { > > + if (btrfs_file_extent_compression(leaf, fi) >= BTRFS_COMPRESS_TYPES) { > > file_extent_err(leaf, slot, > > "invalid compression for file extent, have %u expect range [0, %u]", > > btrfs_file_extent_compression(leaf, fi), > > - BTRFS_COMPRESS_TYPES); > > + BTRFS_COMPRESS_TYPES - 1); > > return -EUCLEAN; > > } > > if (btrfs_file_extent_encryption(leaf, fi)) { > > -- > > 2.21.0 > > > > > > >