diff options
author | Tejun Heo <tj@kernel.org> | 2014-07-09 10:08:08 -0400 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2014-07-09 10:08:08 -0400 |
commit | aa6ec29bee8692ce232132f1a1ea2a1f9196610e (patch) | |
tree | 6edb7f3fa4a3ac01ab03d874918a8c45e0b55e40 /kernel/cgroup.c | |
parent | c1d5d42efdb3e0470c1cfd2fcb50bc3eae813283 (diff) |
cgroup: remove sane_behavior support on non-default hierarchies
sane_behavior has been used as a development vehicle for the default
unified hierarchy. Now that the default hierarchy is in place, the
flag became redundant and confusing as its usage is allowed on all
hierarchies. There are gonna be either the default hierarchy or
legacy ones. Let's make that clear by removing sane_behavior support
on non-default hierarchies.
This patch replaces cgroup_sane_behavior() with cgroup_on_dfl(). The
comment on top of CGRP_ROOT_SANE_BEHAVIOR is moved to on top of
cgroup_on_dfl() with sane_behavior specific part dropped.
On the default and legacy hierarchies w/o sane_behavior, this
shouldn't cause any behavior differences.
Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Vivek Goyal <vgoyal@redhat.com>
Acked-by: Li Zefan <lizefan@huawei.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Michal Hocko <mhocko@suse.cz>
Diffstat (limited to 'kernel/cgroup.c')
-rw-r--r-- | kernel/cgroup.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/kernel/cgroup.c b/kernel/cgroup.c index 0ea54af6b133..fb07c6d43aff 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c | |||
@@ -1470,8 +1470,8 @@ static int cgroup_remount(struct kernfs_root *kf_root, int *flags, char *data) | |||
1470 | struct cgroup_sb_opts opts; | 1470 | struct cgroup_sb_opts opts; |
1471 | unsigned int added_mask, removed_mask; | 1471 | unsigned int added_mask, removed_mask; |
1472 | 1472 | ||
1473 | if (root->flags & CGRP_ROOT_SANE_BEHAVIOR) { | 1473 | if (root == &cgrp_dfl_root) { |
1474 | pr_err("sane_behavior: remount is not allowed\n"); | 1474 | pr_err("remount is not allowed\n"); |
1475 | return -EINVAL; | 1475 | return -EINVAL; |
1476 | } | 1476 | } |
1477 | 1477 | ||
@@ -2943,9 +2943,9 @@ static int cgroup_rename(struct kernfs_node *kn, struct kernfs_node *new_parent, | |||
2943 | 2943 | ||
2944 | /* | 2944 | /* |
2945 | * This isn't a proper migration and its usefulness is very | 2945 | * This isn't a proper migration and its usefulness is very |
2946 | * limited. Disallow if sane_behavior. | 2946 | * limited. Disallow on the default hierarchy. |
2947 | */ | 2947 | */ |
2948 | if (cgroup_sane_behavior(cgrp)) | 2948 | if (cgroup_on_dfl(cgrp)) |
2949 | return -EPERM; | 2949 | return -EPERM; |
2950 | 2950 | ||
2951 | /* | 2951 | /* |
@@ -3031,7 +3031,7 @@ static int cgroup_addrm_files(struct cgroup *cgrp, struct cftype cfts[], | |||
3031 | /* does cft->flags tell us to skip this file on @cgrp? */ | 3031 | /* does cft->flags tell us to skip this file on @cgrp? */ |
3032 | if ((cft->flags & CFTYPE_ONLY_ON_DFL) && !cgroup_on_dfl(cgrp)) | 3032 | if ((cft->flags & CFTYPE_ONLY_ON_DFL) && !cgroup_on_dfl(cgrp)) |
3033 | continue; | 3033 | continue; |
3034 | if ((cft->flags & CFTYPE_INSANE) && cgroup_sane_behavior(cgrp)) | 3034 | if ((cft->flags & CFTYPE_INSANE) && cgroup_on_dfl(cgrp)) |
3035 | continue; | 3035 | continue; |
3036 | if ((cft->flags & CFTYPE_NOT_ON_ROOT) && !cgroup_parent(cgrp)) | 3036 | if ((cft->flags & CFTYPE_NOT_ON_ROOT) && !cgroup_parent(cgrp)) |
3037 | continue; | 3037 | continue; |
@@ -3764,8 +3764,9 @@ after: | |||
3764 | * | 3764 | * |
3765 | * All this extra complexity was caused by the original implementation | 3765 | * All this extra complexity was caused by the original implementation |
3766 | * committing to an entirely unnecessary property. In the long term, we | 3766 | * committing to an entirely unnecessary property. In the long term, we |
3767 | * want to do away with it. Explicitly scramble sort order if | 3767 | * want to do away with it. Explicitly scramble sort order if on the |
3768 | * sane_behavior so that no such expectation exists in the new interface. | 3768 | * default hierarchy so that no such expectation exists in the new |
3769 | * interface. | ||
3769 | * | 3770 | * |
3770 | * Scrambling is done by swapping every two consecutive bits, which is | 3771 | * Scrambling is done by swapping every two consecutive bits, which is |
3771 | * non-identity one-to-one mapping which disturbs sort order sufficiently. | 3772 | * non-identity one-to-one mapping which disturbs sort order sufficiently. |
@@ -3780,7 +3781,7 @@ static pid_t pid_fry(pid_t pid) | |||
3780 | 3781 | ||
3781 | static pid_t cgroup_pid_fry(struct cgroup *cgrp, pid_t pid) | 3782 | static pid_t cgroup_pid_fry(struct cgroup *cgrp, pid_t pid) |
3782 | { | 3783 | { |
3783 | if (cgroup_sane_behavior(cgrp)) | 3784 | if (cgroup_on_dfl(cgrp)) |
3784 | return pid_fry(pid); | 3785 | return pid_fry(pid); |
3785 | else | 3786 | else |
3786 | return pid; | 3787 | return pid; |
@@ -3883,7 +3884,7 @@ static int pidlist_array_load(struct cgroup *cgrp, enum cgroup_filetype type, | |||
3883 | css_task_iter_end(&it); | 3884 | css_task_iter_end(&it); |
3884 | length = n; | 3885 | length = n; |
3885 | /* now sort & (if procs) strip out duplicates */ | 3886 | /* now sort & (if procs) strip out duplicates */ |
3886 | if (cgroup_sane_behavior(cgrp)) | 3887 | if (cgroup_on_dfl(cgrp)) |
3887 | sort(array, length, sizeof(pid_t), fried_cmppid, NULL); | 3888 | sort(array, length, sizeof(pid_t), fried_cmppid, NULL); |
3888 | else | 3889 | else |
3889 | sort(array, length, sizeof(pid_t), cmppid, NULL); | 3890 | sort(array, length, sizeof(pid_t), cmppid, NULL); |