]> git.proxmox.com Git - pve-kernel.git/commitdiff
rebase patches on top of Ubuntu-5.15.0-19.19
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Mon, 31 Jan 2022 08:40:02 +0000 (09:40 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Mon, 31 Jan 2022 08:40:02 +0000 (09:40 +0100)
(generated with debian/scripts/import-upstream-tag)

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
patches/kernel/0003-pci-Enable-overrides-for-missing-ACS-capabilities-4..patch
patches/kernel/0005-net-core-downgrade-unregister_netdevice-refcount-lea.patch
patches/kernel/0008-do-not-generate-split-BTF-type-info-per-default.patch [new file with mode: 0644]
patches/kernel/0009-blk-cgroup-always-terminate-io.stat-lines.patch [new file with mode: 0644]
patches/kernel/0009-do-not-generate-split-BTF-type-info-per-default.patch [deleted file]
patches/kernel/0010-blk-cgroup-always-terminate-io.stat-lines.patch [deleted file]
patches/kernel/0011-vfs-fix.patch [deleted file]

index cf367c1ab5bc78095b6dfc182022068b6a00298a..bd2e87cb46b96e9958bd3bb283fd9e20132dc01b 100644 (file)
@@ -55,10 +55,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
  2 files changed, 111 insertions(+)
 
 diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
-index 0a6c12e3fd4a..51e9b9efdd34 100644
+index 21575acb6a20..fad011895cde 100644
 --- a/Documentation/admin-guide/kernel-parameters.txt
 +++ b/Documentation/admin-guide/kernel-parameters.txt
-@@ -3906,6 +3906,15 @@
+@@ -3908,6 +3908,15 @@
                                Also, it enforces the PCI Local Bus spec
                                rule that those bits should be 0 in system reset
                                events (useful for kexec/kdump cases).
@@ -75,7 +75,7 @@ index 0a6c12e3fd4a..51e9b9efdd34 100644
                                Safety option to keep boot IRQs enabled. This
                                should never be necessary.
 diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
-index 993eff5d2e39..e76bfd054dba 100644
+index 8e352736734f..0d5b4fd01aae 100644
 --- a/drivers/pci/quirks.c
 +++ b/drivers/pci/quirks.c
 @@ -193,6 +193,106 @@ static int __init pci_apply_final_quirks(void)
@@ -185,7 +185,7 @@ index 993eff5d2e39..e76bfd054dba 100644
  /*
   * Decoding should be disabled for a PCI device during BAR sizing to avoid
   * conflict. But doing so may cause problems on host bridge and perhaps other
-@@ -4912,6 +5012,8 @@ static const struct pci_dev_acs_enabled {
+@@ -4915,6 +5015,8 @@ static const struct pci_dev_acs_enabled {
        { PCI_VENDOR_ID_CAVIUM, 0xA060, pci_quirk_mf_endpoint_acs },
        /* APM X-Gene */
        { PCI_VENDOR_ID_AMCC, 0xE004, pci_quirk_xgene_acs },
index d821b32210157f73fdbe61c043ec926f9d8030c7..6ef040ee4827475342f37382468cd37def49ce73 100644 (file)
@@ -10,10 +10,10 @@ Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/net/core/dev.c b/net/core/dev.c
-index 91f53eeb0e79..c0b35ed33b30 100644
+index 33dc2a3ff7d7..b797bc32a088 100644
 --- a/net/core/dev.c
 +++ b/net/core/dev.c
-@@ -10518,7 +10518,7 @@ static void netdev_wait_allrefs(struct net_device *dev)
+@@ -10524,7 +10524,7 @@ static void netdev_wait_allrefs(struct net_device *dev)
                if (refcnt != 1 &&
                    time_after(jiffies, warning_time +
                               netdev_unregister_timeout_secs * HZ)) {
diff --git a/patches/kernel/0008-do-not-generate-split-BTF-type-info-per-default.patch b/patches/kernel/0008-do-not-generate-split-BTF-type-info-per-default.patch
new file mode 100644 (file)
index 0000000..3b3030e
--- /dev/null
@@ -0,0 +1,28 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= <f.gruenbichler@proxmox.com>
+Date: Thu, 14 Sep 2017 11:09:58 +0200
+Subject: [PATCH] do not generate split BTF type info per default
+
+This reverts commit a8ed1a0607cfa5478ff6009539f44790c4d0956d.
+
+It breaks ZFS sometimes:
+https://github.com/openzfs/zfs/issues/12301#issuecomment-873303739
+
+Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
+---
+ lib/Kconfig.debug | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
+index 2a9b6dcdac4f..ecc18910a6b2 100644
+--- a/lib/Kconfig.debug
++++ b/lib/Kconfig.debug
+@@ -325,7 +325,7 @@ config PAHOLE_HAS_SPLIT_BTF
+       def_bool $(success, test `$(PAHOLE) --version | sed -E 's/v([0-9]+)\.([0-9]+)/\1\2/'` -ge "119")
+ config DEBUG_INFO_BTF_MODULES
+-      def_bool y
++      def_bool n
+       depends on DEBUG_INFO_BTF && MODULES && PAHOLE_HAS_SPLIT_BTF
+       help
+         Generate compact split BTF type information for kernel modules.
diff --git a/patches/kernel/0009-blk-cgroup-always-terminate-io.stat-lines.patch b/patches/kernel/0009-blk-cgroup-always-terminate-io.stat-lines.patch
new file mode 100644 (file)
index 0000000..ae83bc1
--- /dev/null
@@ -0,0 +1,147 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Wolfgang Bumiller <w.bumiller@proxmox.com>
+Date: Tue, 11 Jan 2022 09:31:59 +0100
+Subject: [PATCH] blk-cgroup: always terminate io.stat lines
+
+With the removal of seq_get_buf in blkcg_print_one_stat, we
+cannot make adding the newline conditional on there being
+relevant stats because the name was already written out
+unconditionally.
+Otherwise we may end up with multiple device names in one
+line which is confusing and doesn't follow the nested-keyed
+file format.
+
+Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
+Fixes: 252c651a4c85 ("blk-cgroup: stop using seq_get_buf")
+Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
+---
+ block/blk-cgroup.c         | 9 ++-------
+ block/blk-iocost.c         | 5 ++---
+ block/blk-iolatency.c      | 8 +++-----
+ include/linux/blk-cgroup.h | 2 +-
+ 4 files changed, 8 insertions(+), 16 deletions(-)
+
+diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
+index 0eec59e4df65..38c62a44905a 100644
+--- a/block/blk-cgroup.c
++++ b/block/blk-cgroup.c
+@@ -887,7 +887,6 @@ static void blkcg_print_one_stat(struct blkcg_gq *blkg, struct seq_file *s)
+ {
+       struct blkg_iostat_set *bis = &blkg->iostat;
+       u64 rbytes, wbytes, rios, wios, dbytes, dios;
+-      bool has_stats = false;
+       const char *dname;
+       unsigned seq;
+       int i;
+@@ -913,14 +912,12 @@ static void blkcg_print_one_stat(struct blkcg_gq *blkg, struct seq_file *s)
+       } while (u64_stats_fetch_retry(&bis->sync, seq));
+       if (rbytes || wbytes || rios || wios) {
+-              has_stats = true;
+               seq_printf(s, "rbytes=%llu wbytes=%llu rios=%llu wios=%llu dbytes=%llu dios=%llu",
+                       rbytes, wbytes, rios, wios,
+                       dbytes, dios);
+       }
+       if (blkcg_debug_stats && atomic_read(&blkg->use_delay)) {
+-              has_stats = true;
+               seq_printf(s, " use_delay=%d delay_nsec=%llu",
+                       atomic_read(&blkg->use_delay),
+                       atomic64_read(&blkg->delay_nsec));
+@@ -932,12 +929,10 @@ static void blkcg_print_one_stat(struct blkcg_gq *blkg, struct seq_file *s)
+               if (!blkg->pd[i] || !pol->pd_stat_fn)
+                       continue;
+-              if (pol->pd_stat_fn(blkg->pd[i], s))
+-                      has_stats = true;
++              pol->pd_stat_fn(blkg->pd[i], s);
+       }
+-      if (has_stats)
+-              seq_printf(s, "\n");
++      seq_puts(s, "\n");
+ }
+ static int blkcg_print_stat(struct seq_file *sf, void *v)
+diff --git a/block/blk-iocost.c b/block/blk-iocost.c
+index eb7b0d6bd11f..381c28f9561e 100644
+--- a/block/blk-iocost.c
++++ b/block/blk-iocost.c
+@@ -2995,13 +2995,13 @@ static void ioc_pd_free(struct blkg_policy_data *pd)
+       kfree(iocg);
+ }
+-static bool ioc_pd_stat(struct blkg_policy_data *pd, struct seq_file *s)
++static void ioc_pd_stat(struct blkg_policy_data *pd, struct seq_file *s)
+ {
+       struct ioc_gq *iocg = pd_to_iocg(pd);
+       struct ioc *ioc = iocg->ioc;
+       if (!ioc->enabled)
+-              return false;
++              return;
+       if (iocg->level == 0) {
+               unsigned vp10k = DIV64_U64_ROUND_CLOSEST(
+@@ -3017,7 +3017,6 @@ static bool ioc_pd_stat(struct blkg_policy_data *pd, struct seq_file *s)
+                       iocg->last_stat.wait_us,
+                       iocg->last_stat.indebt_us,
+                       iocg->last_stat.indelay_us);
+-      return true;
+ }
+ static u64 ioc_weight_prfill(struct seq_file *sf, struct blkg_policy_data *pd,
+diff --git a/block/blk-iolatency.c b/block/blk-iolatency.c
+index c0545f9da549..d33460f3d43d 100644
+--- a/block/blk-iolatency.c
++++ b/block/blk-iolatency.c
+@@ -890,7 +890,7 @@ static int iolatency_print_limit(struct seq_file *sf, void *v)
+       return 0;
+ }
+-static bool iolatency_ssd_stat(struct iolatency_grp *iolat, struct seq_file *s)
++static void iolatency_ssd_stat(struct iolatency_grp *iolat, struct seq_file *s)
+ {
+       struct latency_stat stat;
+       int cpu;
+@@ -913,17 +913,16 @@ static bool iolatency_ssd_stat(struct iolatency_grp *iolat, struct seq_file *s)
+                       (unsigned long long)stat.ps.missed,
+                       (unsigned long long)stat.ps.total,
+                       iolat->rq_depth.max_depth);
+-      return true;
+ }
+-static bool iolatency_pd_stat(struct blkg_policy_data *pd, struct seq_file *s)
++static void iolatency_pd_stat(struct blkg_policy_data *pd, struct seq_file *s)
+ {
+       struct iolatency_grp *iolat = pd_to_lat(pd);
+       unsigned long long avg_lat;
+       unsigned long long cur_win;
+       if (!blkcg_debug_stats)
+-              return false;
++              return;
+       if (iolat->ssd)
+               return iolatency_ssd_stat(iolat, s);
+@@ -936,7 +935,6 @@ static bool iolatency_pd_stat(struct blkg_policy_data *pd, struct seq_file *s)
+       else
+               seq_printf(s, " depth=%u avg_lat=%llu win=%llu",
+                       iolat->rq_depth.max_depth, avg_lat, cur_win);
+-      return true;
+ }
+ static struct blkg_policy_data *iolatency_pd_alloc(gfp_t gfp,
+diff --git a/include/linux/blk-cgroup.h b/include/linux/blk-cgroup.h
+index b4de2010fba5..132e05ed6935 100644
+--- a/include/linux/blk-cgroup.h
++++ b/include/linux/blk-cgroup.h
+@@ -152,7 +152,7 @@ typedef void (blkcg_pol_online_pd_fn)(struct blkg_policy_data *pd);
+ typedef void (blkcg_pol_offline_pd_fn)(struct blkg_policy_data *pd);
+ typedef void (blkcg_pol_free_pd_fn)(struct blkg_policy_data *pd);
+ typedef void (blkcg_pol_reset_pd_stats_fn)(struct blkg_policy_data *pd);
+-typedef bool (blkcg_pol_stat_pd_fn)(struct blkg_policy_data *pd,
++typedef void (blkcg_pol_stat_pd_fn)(struct blkg_policy_data *pd,
+                               struct seq_file *s);
+ struct blkcg_policy {
diff --git a/patches/kernel/0009-do-not-generate-split-BTF-type-info-per-default.patch b/patches/kernel/0009-do-not-generate-split-BTF-type-info-per-default.patch
deleted file mode 100644 (file)
index 3b3030e..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= <f.gruenbichler@proxmox.com>
-Date: Thu, 14 Sep 2017 11:09:58 +0200
-Subject: [PATCH] do not generate split BTF type info per default
-
-This reverts commit a8ed1a0607cfa5478ff6009539f44790c4d0956d.
-
-It breaks ZFS sometimes:
-https://github.com/openzfs/zfs/issues/12301#issuecomment-873303739
-
-Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
----
- lib/Kconfig.debug | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
-index 2a9b6dcdac4f..ecc18910a6b2 100644
---- a/lib/Kconfig.debug
-+++ b/lib/Kconfig.debug
-@@ -325,7 +325,7 @@ config PAHOLE_HAS_SPLIT_BTF
-       def_bool $(success, test `$(PAHOLE) --version | sed -E 's/v([0-9]+)\.([0-9]+)/\1\2/'` -ge "119")
- config DEBUG_INFO_BTF_MODULES
--      def_bool y
-+      def_bool n
-       depends on DEBUG_INFO_BTF && MODULES && PAHOLE_HAS_SPLIT_BTF
-       help
-         Generate compact split BTF type information for kernel modules.
diff --git a/patches/kernel/0010-blk-cgroup-always-terminate-io.stat-lines.patch b/patches/kernel/0010-blk-cgroup-always-terminate-io.stat-lines.patch
deleted file mode 100644 (file)
index ae83bc1..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Wolfgang Bumiller <w.bumiller@proxmox.com>
-Date: Tue, 11 Jan 2022 09:31:59 +0100
-Subject: [PATCH] blk-cgroup: always terminate io.stat lines
-
-With the removal of seq_get_buf in blkcg_print_one_stat, we
-cannot make adding the newline conditional on there being
-relevant stats because the name was already written out
-unconditionally.
-Otherwise we may end up with multiple device names in one
-line which is confusing and doesn't follow the nested-keyed
-file format.
-
-Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
-Fixes: 252c651a4c85 ("blk-cgroup: stop using seq_get_buf")
-Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
----
- block/blk-cgroup.c         | 9 ++-------
- block/blk-iocost.c         | 5 ++---
- block/blk-iolatency.c      | 8 +++-----
- include/linux/blk-cgroup.h | 2 +-
- 4 files changed, 8 insertions(+), 16 deletions(-)
-
-diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
-index 0eec59e4df65..38c62a44905a 100644
---- a/block/blk-cgroup.c
-+++ b/block/blk-cgroup.c
-@@ -887,7 +887,6 @@ static void blkcg_print_one_stat(struct blkcg_gq *blkg, struct seq_file *s)
- {
-       struct blkg_iostat_set *bis = &blkg->iostat;
-       u64 rbytes, wbytes, rios, wios, dbytes, dios;
--      bool has_stats = false;
-       const char *dname;
-       unsigned seq;
-       int i;
-@@ -913,14 +912,12 @@ static void blkcg_print_one_stat(struct blkcg_gq *blkg, struct seq_file *s)
-       } while (u64_stats_fetch_retry(&bis->sync, seq));
-       if (rbytes || wbytes || rios || wios) {
--              has_stats = true;
-               seq_printf(s, "rbytes=%llu wbytes=%llu rios=%llu wios=%llu dbytes=%llu dios=%llu",
-                       rbytes, wbytes, rios, wios,
-                       dbytes, dios);
-       }
-       if (blkcg_debug_stats && atomic_read(&blkg->use_delay)) {
--              has_stats = true;
-               seq_printf(s, " use_delay=%d delay_nsec=%llu",
-                       atomic_read(&blkg->use_delay),
-                       atomic64_read(&blkg->delay_nsec));
-@@ -932,12 +929,10 @@ static void blkcg_print_one_stat(struct blkcg_gq *blkg, struct seq_file *s)
-               if (!blkg->pd[i] || !pol->pd_stat_fn)
-                       continue;
--              if (pol->pd_stat_fn(blkg->pd[i], s))
--                      has_stats = true;
-+              pol->pd_stat_fn(blkg->pd[i], s);
-       }
--      if (has_stats)
--              seq_printf(s, "\n");
-+      seq_puts(s, "\n");
- }
- static int blkcg_print_stat(struct seq_file *sf, void *v)
-diff --git a/block/blk-iocost.c b/block/blk-iocost.c
-index eb7b0d6bd11f..381c28f9561e 100644
---- a/block/blk-iocost.c
-+++ b/block/blk-iocost.c
-@@ -2995,13 +2995,13 @@ static void ioc_pd_free(struct blkg_policy_data *pd)
-       kfree(iocg);
- }
--static bool ioc_pd_stat(struct blkg_policy_data *pd, struct seq_file *s)
-+static void ioc_pd_stat(struct blkg_policy_data *pd, struct seq_file *s)
- {
-       struct ioc_gq *iocg = pd_to_iocg(pd);
-       struct ioc *ioc = iocg->ioc;
-       if (!ioc->enabled)
--              return false;
-+              return;
-       if (iocg->level == 0) {
-               unsigned vp10k = DIV64_U64_ROUND_CLOSEST(
-@@ -3017,7 +3017,6 @@ static bool ioc_pd_stat(struct blkg_policy_data *pd, struct seq_file *s)
-                       iocg->last_stat.wait_us,
-                       iocg->last_stat.indebt_us,
-                       iocg->last_stat.indelay_us);
--      return true;
- }
- static u64 ioc_weight_prfill(struct seq_file *sf, struct blkg_policy_data *pd,
-diff --git a/block/blk-iolatency.c b/block/blk-iolatency.c
-index c0545f9da549..d33460f3d43d 100644
---- a/block/blk-iolatency.c
-+++ b/block/blk-iolatency.c
-@@ -890,7 +890,7 @@ static int iolatency_print_limit(struct seq_file *sf, void *v)
-       return 0;
- }
--static bool iolatency_ssd_stat(struct iolatency_grp *iolat, struct seq_file *s)
-+static void iolatency_ssd_stat(struct iolatency_grp *iolat, struct seq_file *s)
- {
-       struct latency_stat stat;
-       int cpu;
-@@ -913,17 +913,16 @@ static bool iolatency_ssd_stat(struct iolatency_grp *iolat, struct seq_file *s)
-                       (unsigned long long)stat.ps.missed,
-                       (unsigned long long)stat.ps.total,
-                       iolat->rq_depth.max_depth);
--      return true;
- }
--static bool iolatency_pd_stat(struct blkg_policy_data *pd, struct seq_file *s)
-+static void iolatency_pd_stat(struct blkg_policy_data *pd, struct seq_file *s)
- {
-       struct iolatency_grp *iolat = pd_to_lat(pd);
-       unsigned long long avg_lat;
-       unsigned long long cur_win;
-       if (!blkcg_debug_stats)
--              return false;
-+              return;
-       if (iolat->ssd)
-               return iolatency_ssd_stat(iolat, s);
-@@ -936,7 +935,6 @@ static bool iolatency_pd_stat(struct blkg_policy_data *pd, struct seq_file *s)
-       else
-               seq_printf(s, " depth=%u avg_lat=%llu win=%llu",
-                       iolat->rq_depth.max_depth, avg_lat, cur_win);
--      return true;
- }
- static struct blkg_policy_data *iolatency_pd_alloc(gfp_t gfp,
-diff --git a/include/linux/blk-cgroup.h b/include/linux/blk-cgroup.h
-index b4de2010fba5..132e05ed6935 100644
---- a/include/linux/blk-cgroup.h
-+++ b/include/linux/blk-cgroup.h
-@@ -152,7 +152,7 @@ typedef void (blkcg_pol_online_pd_fn)(struct blkg_policy_data *pd);
- typedef void (blkcg_pol_offline_pd_fn)(struct blkg_policy_data *pd);
- typedef void (blkcg_pol_free_pd_fn)(struct blkg_policy_data *pd);
- typedef void (blkcg_pol_reset_pd_stats_fn)(struct blkg_policy_data *pd);
--typedef bool (blkcg_pol_stat_pd_fn)(struct blkg_policy_data *pd,
-+typedef void (blkcg_pol_stat_pd_fn)(struct blkg_policy_data *pd,
-                               struct seq_file *s);
- struct blkcg_policy {
diff --git a/patches/kernel/0011-vfs-fix.patch b/patches/kernel/0011-vfs-fix.patch
deleted file mode 100644 (file)
index dc95794..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Jamie Hill-Daniel <jamie@hill-daniel.co.uk>
-Date: Tue, 18 Jan 2022 08:06:04 +0100
-Subject: vfs: fs_context: fix up param length parsing in legacy_parse_param
-
-commit 722d94847de29310e8aa03fcbdb41fc92c521756 upstream.
-
-The "PAGE_SIZE - 2 - size" calculation in legacy_parse_param() is an
-unsigned type so a large value of "size" results in a high positive
-value instead of a negative value as expected.  Fix this by getting rid
-of the subtraction.
-
-Signed-off-by: Jamie Hill-Daniel <jamie@hill-daniel.co.uk>
-Signed-off-by: William Liu <willsroot@protonmail.com>
-Tested-by: Salvatore Bonaccorso <carnil@debian.org>
-Tested-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
-Acked-by: Dan Carpenter <dan.carpenter@oracle.com>
-Acked-by: Al Viro <viro@zeniv.linux.org.uk>
-Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
----
- fs/fs_context.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/fs/fs_context.c b/fs/fs_context.c
-index b7e43a780a625..24ce12f0db32e 100644
---- a/fs/fs_context.c
-+++ b/fs/fs_context.c
-@@ -548,7 +548,7 @@ static int legacy_parse_param(struct fs_context *fc, struct fs_parameter *param)
-                             param->key);
-       }
--      if (len > PAGE_SIZE - 2 - size)
-+      if (size + len + 2 > PAGE_SIZE)
-               return invalf(fc, "VFS: Legacy: Cumulative options too large");
-       if (strchr(param->key, ',') ||
-           (param->type == fs_value_is_string &&