On 05/15/2018 03:51 PM, Misono Tomohiro wrote:
> Incompat flag of lzo/zstd compression should be set at:
> 1. mount time (-o compress/compress-force)
> 2. when defrag is done
> 3. when property is set
>
> Currently 3. is missing and this commit adds this.
>
If I don't misunderstand, compression property of an inode is only
apply for *the* inode, not the whole filesystem.
So the original logical should be okay.
Thanks,
Su
> Signed-off-by: Tomohiro Misono <misono.tomohiro@xxxxxxxxxxxxxx>
> ---
> fs/btrfs/props.c | 12 ++++++++----
> 1 file changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/fs/btrfs/props.c b/fs/btrfs/props.c
> index 53a8c95828e3..dc6140013ae8 100644
> --- a/fs/btrfs/props.c
> +++ b/fs/btrfs/props.c
> @@ -380,6 +380,7 @@ static int prop_compression_apply(struct inode *inode,
> const char *value,
> size_t len)
> {
> + struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
> int type;
>
> if (len == 0) {
> @@ -390,14 +391,17 @@ static int prop_compression_apply(struct inode *inode,
> return 0;
> }
>
> - if (!strncmp("lzo", value, 3))
> + if (!strncmp("lzo", value, 3)) {
> type = BTRFS_COMPRESS_LZO;
> - else if (!strncmp("zlib", value, 4))
> + btrfs_set_fs_incompat(fs_info, COMPRESS_LZO);
> + } else if (!strncmp("zlib", value, 4)) {
> type = BTRFS_COMPRESS_ZLIB;
> - else if (!strncmp("zstd", value, len))
> + } else if (!strncmp("zstd", value, len)) {
> type = BTRFS_COMPRESS_ZSTD;
> - else
> + btrfs_set_fs_incompat(fs_info, COMPRESS_ZSTD);
> + } else {
> return -EINVAL;
> + }
>
> BTRFS_I(inode)->flags &= ~BTRFS_INODE_NOCOMPRESS;
> BTRFS_I(inode)->flags |= BTRFS_INODE_COMPRESS;
>
Attachment:
pEpkey.asc
Description: application/pgp-keys
