Merge tag 'sound-6.7-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai...
[linux-block.git] / kernel / cgroup / cgroup.c
index 484adb375b155bc00bfaaf0bc808e4b1d43ea097..1d5b9de3b1b9d01791b1222bf2fcbb4e46c852ee 100644 (file)
@@ -1908,6 +1908,7 @@ enum cgroup2_param {
        Opt_favordynmods,
        Opt_memory_localevents,
        Opt_memory_recursiveprot,
+       Opt_memory_hugetlb_accounting,
        nr__cgroup2_params
 };
 
@@ -1916,6 +1917,7 @@ static const struct fs_parameter_spec cgroup2_fs_parameters[] = {
        fsparam_flag("favordynmods",            Opt_favordynmods),
        fsparam_flag("memory_localevents",      Opt_memory_localevents),
        fsparam_flag("memory_recursiveprot",    Opt_memory_recursiveprot),
+       fsparam_flag("memory_hugetlb_accounting", Opt_memory_hugetlb_accounting),
        {}
 };
 
@@ -1942,6 +1944,9 @@ static int cgroup2_parse_param(struct fs_context *fc, struct fs_parameter *param
        case Opt_memory_recursiveprot:
                ctx->flags |= CGRP_ROOT_MEMORY_RECURSIVE_PROT;
                return 0;
+       case Opt_memory_hugetlb_accounting:
+               ctx->flags |= CGRP_ROOT_MEMORY_HUGETLB_ACCOUNTING;
+               return 0;
        }
        return -EINVAL;
 }
@@ -1966,6 +1971,11 @@ static void apply_cgroup_root_flags(unsigned int root_flags)
                        cgrp_dfl_root.flags |= CGRP_ROOT_MEMORY_RECURSIVE_PROT;
                else
                        cgrp_dfl_root.flags &= ~CGRP_ROOT_MEMORY_RECURSIVE_PROT;
+
+               if (root_flags & CGRP_ROOT_MEMORY_HUGETLB_ACCOUNTING)
+                       cgrp_dfl_root.flags |= CGRP_ROOT_MEMORY_HUGETLB_ACCOUNTING;
+               else
+                       cgrp_dfl_root.flags &= ~CGRP_ROOT_MEMORY_HUGETLB_ACCOUNTING;
        }
 }
 
@@ -1979,6 +1989,8 @@ static int cgroup_show_options(struct seq_file *seq, struct kernfs_root *kf_root
                seq_puts(seq, ",memory_localevents");
        if (cgrp_dfl_root.flags & CGRP_ROOT_MEMORY_RECURSIVE_PROT)
                seq_puts(seq, ",memory_recursiveprot");
+       if (cgrp_dfl_root.flags & CGRP_ROOT_MEMORY_HUGETLB_ACCOUNTING)
+               seq_puts(seq, ",memory_hugetlb_accounting");
        return 0;
 }
 
@@ -7068,7 +7080,8 @@ static ssize_t features_show(struct kobject *kobj, struct kobj_attribute *attr,
                        "nsdelegate\n"
                        "favordynmods\n"
                        "memory_localevents\n"
-                       "memory_recursiveprot\n");
+                       "memory_recursiveprot\n"
+                       "memory_hugetlb_accounting\n");
 }
 static struct kobj_attribute cgroup_features_attr = __ATTR_RO(features);