Commit a7164fa4 authored by David Sterba's avatar David Sterba

btrfs: prepare for extensions in compression options

This is a minimal patch intended to be backported to older kernels.
We're going to extend the string specifying the compression method and
this would fail on kernels before that change (the string is compared
exactly).

Relax the string matching only to the prefix, ie. ignoring anything that
goes after "zlib" or "lzo", regardless of th format extension we decide
to use. This applies to the mount options and properties.

That way, patched old kernels could be booted on systems already
utilizing the new compression spec.

Applicable since commit 63541927, v3.14.
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 1e20d1c4
...@@ -408,9 +408,9 @@ static int prop_compression_apply(struct inode *inode, ...@@ -408,9 +408,9 @@ static int prop_compression_apply(struct inode *inode,
return 0; return 0;
} }
if (!strncmp("lzo", value, len)) if (!strncmp("lzo", value, 3))
type = BTRFS_COMPRESS_LZO; type = BTRFS_COMPRESS_LZO;
else if (!strncmp("zlib", value, len)) else if (!strncmp("zlib", value, 4))
type = BTRFS_COMPRESS_ZLIB; type = BTRFS_COMPRESS_ZLIB;
else else
return -EINVAL; return -EINVAL;
......
...@@ -499,14 +499,14 @@ int btrfs_parse_options(struct btrfs_fs_info *info, char *options, ...@@ -499,14 +499,14 @@ int btrfs_parse_options(struct btrfs_fs_info *info, char *options,
btrfs_test_opt(info, FORCE_COMPRESS); btrfs_test_opt(info, FORCE_COMPRESS);
if (token == Opt_compress || if (token == Opt_compress ||
token == Opt_compress_force || token == Opt_compress_force ||
strcmp(args[0].from, "zlib") == 0) { strncmp(args[0].from, "zlib", 4) == 0) {
compress_type = "zlib"; compress_type = "zlib";
info->compress_type = BTRFS_COMPRESS_ZLIB; info->compress_type = BTRFS_COMPRESS_ZLIB;
btrfs_set_opt(info->mount_opt, COMPRESS); btrfs_set_opt(info->mount_opt, COMPRESS);
btrfs_clear_opt(info->mount_opt, NODATACOW); btrfs_clear_opt(info->mount_opt, NODATACOW);
btrfs_clear_opt(info->mount_opt, NODATASUM); btrfs_clear_opt(info->mount_opt, NODATASUM);
no_compress = 0; no_compress = 0;
} else if (strcmp(args[0].from, "lzo") == 0) { } else if (strncmp(args[0].from, "lzo", 3) == 0) {
compress_type = "lzo"; compress_type = "lzo";
info->compress_type = BTRFS_COMPRESS_LZO; info->compress_type = BTRFS_COMPRESS_LZO;
btrfs_set_opt(info->mount_opt, COMPRESS); btrfs_set_opt(info->mount_opt, COMPRESS);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment