Loading kernel/cgroup/cgroup.c +47 −0 Original line number Diff line number Diff line Loading @@ -2225,6 +2225,50 @@ static struct file_system_type cgroup2_fs_type = { .fs_flags = FS_USERNS_MOUNT, }; #ifdef CONFIG_CPUSETS static const struct fs_context_operations cpuset_fs_context_ops = { .get_tree = cgroup1_get_tree, .free = cgroup_fs_context_free, }; /* * This is ugly, but preserves the userspace API for existing cpuset * users. If someone tries to mount the "cpuset" filesystem, we * silently switch it to mount "cgroup" instead */ static int cpuset_init_fs_context(struct fs_context *fc) { char *agent = kstrdup("/sbin/cpuset_release_agent", GFP_USER); struct cgroup_fs_context *ctx; int err; err = cgroup_init_fs_context(fc); if (err) { kfree(agent); return err; } fc->ops = &cpuset_fs_context_ops; ctx = cgroup_fc2context(fc); ctx->subsys_mask = 1 << cpuset_cgrp_id; ctx->flags |= CGRP_ROOT_NOPREFIX; ctx->release_agent = agent; get_filesystem(&cgroup_fs_type); put_filesystem(fc->fs_type); fc->fs_type = &cgroup_fs_type; return 0; } static struct file_system_type cpuset_fs_type = { .name = "cpuset", .init_fs_context = cpuset_init_fs_context, .fs_flags = FS_USERNS_MOUNT, }; #endif int cgroup_path_ns_locked(struct cgroup *cgrp, char *buf, size_t buflen, struct cgroup_namespace *ns) { Loading Loading @@ -5710,6 +5754,9 @@ int __init cgroup_init(void) WARN_ON(register_filesystem(&cgroup_fs_type)); WARN_ON(register_filesystem(&cgroup2_fs_type)); WARN_ON(!proc_create_single("cgroups", 0, NULL, proc_cgroupstats_show)); #ifdef CONFIG_CPUSETS WARN_ON(register_filesystem(&cpuset_fs_type)); #endif return 0; } Loading kernel/cgroup/cpuset.c +1 −60 Original line number Diff line number Diff line Loading @@ -355,59 +355,6 @@ static inline bool is_in_v2_mode(void) (cpuset_cgrp_subsys.root->flags & CGRP_ROOT_CPUSET_V2_MODE); } /* * This is ugly, but preserves the userspace API for existing cpuset * users. If someone tries to mount the "cpuset" filesystem, we * silently switch it to mount "cgroup" instead */ static int cpuset_get_tree(struct fs_context *fc) { struct file_system_type *cgroup_fs; struct fs_context *new_fc; int ret; cgroup_fs = get_fs_type("cgroup"); if (!cgroup_fs) return -ENODEV; new_fc = fs_context_for_mount(cgroup_fs, fc->sb_flags); if (IS_ERR(new_fc)) { ret = PTR_ERR(new_fc); } else { static const char agent_path[] = "/sbin/cpuset_release_agent"; ret = vfs_parse_fs_string(new_fc, "cpuset", NULL, 0); if (!ret) ret = vfs_parse_fs_string(new_fc, "noprefix", NULL, 0); if (!ret) ret = vfs_parse_fs_string(new_fc, "release_agent", agent_path, sizeof(agent_path) - 1); if (!ret) ret = vfs_get_tree(new_fc); if (!ret) { /* steal the result */ fc->root = new_fc->root; new_fc->root = NULL; } put_fs_context(new_fc); } put_filesystem(cgroup_fs); return ret; } static const struct fs_context_operations cpuset_fs_context_ops = { .get_tree = cpuset_get_tree, }; static int cpuset_init_fs_context(struct fs_context *fc) { fc->ops = &cpuset_fs_context_ops; return 0; } static struct file_system_type cpuset_fs_type = { .name = "cpuset", .init_fs_context = cpuset_init_fs_context, }; /* * Return in pmask the portion of a cpusets's cpus_allowed that * are online. If none are online, walk up the cpuset hierarchy Loading Loading @@ -2853,13 +2800,11 @@ struct cgroup_subsys cpuset_cgrp_subsys = { /** * cpuset_init - initialize cpusets at system boot * * Description: Initialize top_cpuset and the cpuset internal file system, * Description: Initialize top_cpuset **/ int __init cpuset_init(void) { int err = 0; BUG_ON(!alloc_cpumask_var(&top_cpuset.cpus_allowed, GFP_KERNEL)); BUG_ON(!alloc_cpumask_var(&top_cpuset.effective_cpus, GFP_KERNEL)); BUG_ON(!zalloc_cpumask_var(&top_cpuset.subparts_cpus, GFP_KERNEL)); Loading @@ -2873,10 +2818,6 @@ int __init cpuset_init(void) set_bit(CS_SCHED_LOAD_BALANCE, &top_cpuset.flags); top_cpuset.relax_domain_level = -1; err = register_filesystem(&cpuset_fs_type); if (err < 0) return err; BUG_ON(!alloc_cpumask_var(&cpus_attach, GFP_KERNEL)); return 0; Loading Loading
kernel/cgroup/cgroup.c +47 −0 Original line number Diff line number Diff line Loading @@ -2225,6 +2225,50 @@ static struct file_system_type cgroup2_fs_type = { .fs_flags = FS_USERNS_MOUNT, }; #ifdef CONFIG_CPUSETS static const struct fs_context_operations cpuset_fs_context_ops = { .get_tree = cgroup1_get_tree, .free = cgroup_fs_context_free, }; /* * This is ugly, but preserves the userspace API for existing cpuset * users. If someone tries to mount the "cpuset" filesystem, we * silently switch it to mount "cgroup" instead */ static int cpuset_init_fs_context(struct fs_context *fc) { char *agent = kstrdup("/sbin/cpuset_release_agent", GFP_USER); struct cgroup_fs_context *ctx; int err; err = cgroup_init_fs_context(fc); if (err) { kfree(agent); return err; } fc->ops = &cpuset_fs_context_ops; ctx = cgroup_fc2context(fc); ctx->subsys_mask = 1 << cpuset_cgrp_id; ctx->flags |= CGRP_ROOT_NOPREFIX; ctx->release_agent = agent; get_filesystem(&cgroup_fs_type); put_filesystem(fc->fs_type); fc->fs_type = &cgroup_fs_type; return 0; } static struct file_system_type cpuset_fs_type = { .name = "cpuset", .init_fs_context = cpuset_init_fs_context, .fs_flags = FS_USERNS_MOUNT, }; #endif int cgroup_path_ns_locked(struct cgroup *cgrp, char *buf, size_t buflen, struct cgroup_namespace *ns) { Loading Loading @@ -5710,6 +5754,9 @@ int __init cgroup_init(void) WARN_ON(register_filesystem(&cgroup_fs_type)); WARN_ON(register_filesystem(&cgroup2_fs_type)); WARN_ON(!proc_create_single("cgroups", 0, NULL, proc_cgroupstats_show)); #ifdef CONFIG_CPUSETS WARN_ON(register_filesystem(&cpuset_fs_type)); #endif return 0; } Loading
kernel/cgroup/cpuset.c +1 −60 Original line number Diff line number Diff line Loading @@ -355,59 +355,6 @@ static inline bool is_in_v2_mode(void) (cpuset_cgrp_subsys.root->flags & CGRP_ROOT_CPUSET_V2_MODE); } /* * This is ugly, but preserves the userspace API for existing cpuset * users. If someone tries to mount the "cpuset" filesystem, we * silently switch it to mount "cgroup" instead */ static int cpuset_get_tree(struct fs_context *fc) { struct file_system_type *cgroup_fs; struct fs_context *new_fc; int ret; cgroup_fs = get_fs_type("cgroup"); if (!cgroup_fs) return -ENODEV; new_fc = fs_context_for_mount(cgroup_fs, fc->sb_flags); if (IS_ERR(new_fc)) { ret = PTR_ERR(new_fc); } else { static const char agent_path[] = "/sbin/cpuset_release_agent"; ret = vfs_parse_fs_string(new_fc, "cpuset", NULL, 0); if (!ret) ret = vfs_parse_fs_string(new_fc, "noprefix", NULL, 0); if (!ret) ret = vfs_parse_fs_string(new_fc, "release_agent", agent_path, sizeof(agent_path) - 1); if (!ret) ret = vfs_get_tree(new_fc); if (!ret) { /* steal the result */ fc->root = new_fc->root; new_fc->root = NULL; } put_fs_context(new_fc); } put_filesystem(cgroup_fs); return ret; } static const struct fs_context_operations cpuset_fs_context_ops = { .get_tree = cpuset_get_tree, }; static int cpuset_init_fs_context(struct fs_context *fc) { fc->ops = &cpuset_fs_context_ops; return 0; } static struct file_system_type cpuset_fs_type = { .name = "cpuset", .init_fs_context = cpuset_init_fs_context, }; /* * Return in pmask the portion of a cpusets's cpus_allowed that * are online. If none are online, walk up the cpuset hierarchy Loading Loading @@ -2853,13 +2800,11 @@ struct cgroup_subsys cpuset_cgrp_subsys = { /** * cpuset_init - initialize cpusets at system boot * * Description: Initialize top_cpuset and the cpuset internal file system, * Description: Initialize top_cpuset **/ int __init cpuset_init(void) { int err = 0; BUG_ON(!alloc_cpumask_var(&top_cpuset.cpus_allowed, GFP_KERNEL)); BUG_ON(!alloc_cpumask_var(&top_cpuset.effective_cpus, GFP_KERNEL)); BUG_ON(!zalloc_cpumask_var(&top_cpuset.subparts_cpus, GFP_KERNEL)); Loading @@ -2873,10 +2818,6 @@ int __init cpuset_init(void) set_bit(CS_SCHED_LOAD_BALANCE, &top_cpuset.flags); top_cpuset.relax_domain_level = -1; err = register_filesystem(&cpuset_fs_type); if (err < 0) return err; BUG_ON(!alloc_cpumask_var(&cpus_attach, GFP_KERNEL)); return 0; Loading