diff options
| -rw-r--r-- | mm/memcontrol.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index f0dc076adf05..4d0ea3ceba6d 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
| @@ -1992,6 +1992,7 @@ static int mem_cgroup_swappiness_write(struct cgroup *cgrp, struct cftype *cft, | |||
| 1992 | { | 1992 | { |
| 1993 | struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp); | 1993 | struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp); |
| 1994 | struct mem_cgroup *parent; | 1994 | struct mem_cgroup *parent; |
| 1995 | |||
| 1995 | if (val > 100) | 1996 | if (val > 100) |
| 1996 | return -EINVAL; | 1997 | return -EINVAL; |
| 1997 | 1998 | ||
| @@ -1999,15 +2000,22 @@ static int mem_cgroup_swappiness_write(struct cgroup *cgrp, struct cftype *cft, | |||
| 1999 | return -EINVAL; | 2000 | return -EINVAL; |
| 2000 | 2001 | ||
| 2001 | parent = mem_cgroup_from_cont(cgrp->parent); | 2002 | parent = mem_cgroup_from_cont(cgrp->parent); |
| 2003 | |||
| 2004 | cgroup_lock(); | ||
| 2005 | |||
| 2002 | /* If under hierarchy, only empty-root can set this value */ | 2006 | /* If under hierarchy, only empty-root can set this value */ |
| 2003 | if ((parent->use_hierarchy) || | 2007 | if ((parent->use_hierarchy) || |
| 2004 | (memcg->use_hierarchy && !list_empty(&cgrp->children))) | 2008 | (memcg->use_hierarchy && !list_empty(&cgrp->children))) { |
| 2009 | cgroup_unlock(); | ||
| 2005 | return -EINVAL; | 2010 | return -EINVAL; |
| 2011 | } | ||
| 2006 | 2012 | ||
| 2007 | spin_lock(&memcg->reclaim_param_lock); | 2013 | spin_lock(&memcg->reclaim_param_lock); |
| 2008 | memcg->swappiness = val; | 2014 | memcg->swappiness = val; |
| 2009 | spin_unlock(&memcg->reclaim_param_lock); | 2015 | spin_unlock(&memcg->reclaim_param_lock); |
| 2010 | 2016 | ||
| 2017 | cgroup_unlock(); | ||
| 2018 | |||
| 2011 | return 0; | 2019 | return 0; |
| 2012 | } | 2020 | } |
| 2013 | 2021 | ||
