]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
btrfs: prepare for extensions in compression options
authorDavid Sterba <dsterba@suse.com>
Mon, 17 Jul 2017 16:11:10 +0000 (18:11 +0200)
committerDavid Sterba <dsterba@suse.com>
Wed, 16 Aug 2017 14:12:05 +0000 (16:12 +0200)
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 63541927c8d11, v3.14.

Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/props.c
fs/btrfs/super.c

index 916f5cf9b2929fc640d1555e206ab2804fc7cdce..09c0266f248d07737436b655cea98f6e93e15f37 100644 (file)
@@ -408,9 +408,9 @@ static int prop_compression_apply(struct inode *inode,
                return 0;
        }
 
-       if (!strncmp("lzo", value, len))
+       if (!strncmp("lzo", value, 3))
                type = BTRFS_COMPRESS_LZO;
-       else if (!strncmp("zlib", value, len))
+       else if (!strncmp("zlib", value, 4))
                type = BTRFS_COMPRESS_ZLIB;
        else
                return -EINVAL;
index 64981fc8e39e8c85b95b66a15928c2acda5a5729..8a9bcad3b06a5ed2a2ed5090b410ee2b08ad4877 100644 (file)
@@ -499,14 +499,14 @@ int btrfs_parse_options(struct btrfs_fs_info *info, char *options,
                                btrfs_test_opt(info, FORCE_COMPRESS);
                        if (token == Opt_compress ||
                            token == Opt_compress_force ||
-                           strcmp(args[0].from, "zlib") == 0) {
+                           strncmp(args[0].from, "zlib", 4) == 0) {
                                compress_type = "zlib";
                                info->compress_type = BTRFS_COMPRESS_ZLIB;
                                btrfs_set_opt(info->mount_opt, COMPRESS);
                                btrfs_clear_opt(info->mount_opt, NODATACOW);
                                btrfs_clear_opt(info->mount_opt, NODATASUM);
                                no_compress = 0;
-                       } else if (strcmp(args[0].from, "lzo") == 0) {
+                       } else if (strncmp(args[0].from, "lzo", 3) == 0) {
                                compress_type = "lzo";
                                info->compress_type = BTRFS_COMPRESS_LZO;
                                btrfs_set_opt(info->mount_opt, COMPRESS);