|
@@ -1524,10 +1524,8 @@ static unsigned long mem_cgroup_margin(struct mem_cgroup *memcg)
|
|
|
|
|
|
int mem_cgroup_swappiness(struct mem_cgroup *memcg)
|
|
|
{
|
|
|
- struct cgroup *cgrp = memcg->css.cgroup;
|
|
|
-
|
|
|
/* root ? */
|
|
|
- if (cgrp->parent == NULL)
|
|
|
+ if (!css_parent(&memcg->css))
|
|
|
return vm_swappiness;
|
|
|
|
|
|
return memcg->swappiness;
|
|
@@ -5026,11 +5024,7 @@ static int mem_cgroup_hierarchy_write(struct cgroup *cont, struct cftype *cft,
|
|
|
{
|
|
|
int retval = 0;
|
|
|
struct mem_cgroup *memcg = mem_cgroup_from_cont(cont);
|
|
|
- struct cgroup *parent = cont->parent;
|
|
|
- struct mem_cgroup *parent_memcg = NULL;
|
|
|
-
|
|
|
- if (parent)
|
|
|
- parent_memcg = mem_cgroup_from_cont(parent);
|
|
|
+ struct mem_cgroup *parent_memcg = mem_cgroup_from_css(css_parent(&memcg->css));
|
|
|
|
|
|
mutex_lock(&memcg_create_mutex);
|
|
|
|
|
@@ -5282,18 +5276,15 @@ static int mem_cgroup_write(struct cgroup *cont, struct cftype *cft,
|
|
|
static void memcg_get_hierarchical_limit(struct mem_cgroup *memcg,
|
|
|
unsigned long long *mem_limit, unsigned long long *memsw_limit)
|
|
|
{
|
|
|
- struct cgroup *cgroup;
|
|
|
unsigned long long min_limit, min_memsw_limit, tmp;
|
|
|
|
|
|
min_limit = res_counter_read_u64(&memcg->res, RES_LIMIT);
|
|
|
min_memsw_limit = res_counter_read_u64(&memcg->memsw, RES_LIMIT);
|
|
|
- cgroup = memcg->css.cgroup;
|
|
|
if (!memcg->use_hierarchy)
|
|
|
goto out;
|
|
|
|
|
|
- while (cgroup->parent) {
|
|
|
- cgroup = cgroup->parent;
|
|
|
- memcg = mem_cgroup_from_cont(cgroup);
|
|
|
+ while (css_parent(&memcg->css)) {
|
|
|
+ memcg = mem_cgroup_from_css(css_parent(&memcg->css));
|
|
|
if (!memcg->use_hierarchy)
|
|
|
break;
|
|
|
tmp = res_counter_read_u64(&memcg->res, RES_LIMIT);
|
|
@@ -5523,16 +5514,11 @@ static int mem_cgroup_swappiness_write(struct cgroup *cgrp, struct cftype *cft,
|
|
|
u64 val)
|
|
|
{
|
|
|
struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp);
|
|
|
- struct mem_cgroup *parent;
|
|
|
-
|
|
|
- if (val > 100)
|
|
|
- return -EINVAL;
|
|
|
+ struct mem_cgroup *parent = mem_cgroup_from_css(css_parent(&memcg->css));
|
|
|
|
|
|
- if (cgrp->parent == NULL)
|
|
|
+ if (val > 100 || !parent)
|
|
|
return -EINVAL;
|
|
|
|
|
|
- parent = mem_cgroup_from_cont(cgrp->parent);
|
|
|
-
|
|
|
mutex_lock(&memcg_create_mutex);
|
|
|
|
|
|
/* If under hierarchy, only empty-root can set this value */
|
|
@@ -5861,14 +5847,12 @@ static int mem_cgroup_oom_control_write(struct cgroup *cgrp,
|
|
|
struct cftype *cft, u64 val)
|
|
|
{
|
|
|
struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp);
|
|
|
- struct mem_cgroup *parent;
|
|
|
+ struct mem_cgroup *parent = mem_cgroup_from_css(css_parent(&memcg->css));
|
|
|
|
|
|
/* cannot set to root cgroup and only 0 and 1 are allowed */
|
|
|
- if (!cgrp->parent || !((val == 0) || (val == 1)))
|
|
|
+ if (!parent || !((val == 0) || (val == 1)))
|
|
|
return -EINVAL;
|
|
|
|
|
|
- parent = mem_cgroup_from_cont(cgrp->parent);
|
|
|
-
|
|
|
mutex_lock(&memcg_create_mutex);
|
|
|
/* oom-kill-disable is a flag for subhierarchy. */
|
|
|
if ((parent->use_hierarchy) || memcg_has_children(memcg)) {
|
|
@@ -6266,15 +6250,14 @@ free_out:
|
|
|
static int
|
|
|
mem_cgroup_css_online(struct cgroup *cont)
|
|
|
{
|
|
|
- struct mem_cgroup *memcg, *parent;
|
|
|
+ struct mem_cgroup *memcg = mem_cgroup_from_cont(cont);
|
|
|
+ struct mem_cgroup *parent = mem_cgroup_from_css(css_parent(&memcg->css));
|
|
|
int error = 0;
|
|
|
|
|
|
- if (!cont->parent)
|
|
|
+ if (!parent)
|
|
|
return 0;
|
|
|
|
|
|
mutex_lock(&memcg_create_mutex);
|
|
|
- memcg = mem_cgroup_from_cont(cont);
|
|
|
- parent = mem_cgroup_from_cont(cont->parent);
|
|
|
|
|
|
memcg->use_hierarchy = parent->use_hierarchy;
|
|
|
memcg->oom_kill_disable = parent->oom_kill_disable;
|