lkml.org 
[lkml]   [2008]   [Dec]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 3/21] memcg-memoryswap-controller-fix-limit-check.patch
    There are scatterd calls of res_counter_check_under_limit(), and most
    of them don't take mem+swap accounting into account.

    define mem_cgroup_check_under_limit() and avoid direct use of
    res_counter_check_limit().

    Changelog:
    - replaces all res_counter_check_under_limit().

    Reported-by: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
    Signed-off-by: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
    Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>

    mm/memcontrol.c | 26 +++++++++++++++++---------
    1 file changed, 17 insertions(+), 9 deletions(-)

    Index: mmotm-2.6.28-Dec02/mm/memcontrol.c
    ===================================================================
    --- mmotm-2.6.28-Dec02.orig/mm/memcontrol.c
    +++ mmotm-2.6.28-Dec02/mm/memcontrol.c
    @@ -571,6 +571,18 @@ done:
    return ret;
    }

    +static bool mem_cgroup_check_under_limit(struct mem_cgroup *mem)
    +{
    + if (do_swap_account) {
    + if (res_counter_check_under_limit(&mem->res) &&
    + res_counter_check_under_limit(&mem->memsw))
    + return true;
    + } else
    + if (res_counter_check_under_limit(&mem->res))
    + return true;
    + return false;
    +}
    +
    /*
    * Dance down the hierarchy if needed to reclaim memory. We remember the
    * last child we reclaimed from, so that we don't end up penalizing
    @@ -592,7 +604,7 @@ static int mem_cgroup_hierarchical_recla
    * have left.
    */
    ret = try_to_free_mem_cgroup_pages(root_mem, gfp_mask, noswap);
    - if (res_counter_check_under_limit(&root_mem->res))
    + if (mem_cgroup_check_under_limit(root_mem))
    return 0;

    next_mem = mem_cgroup_get_first_node(root_mem);
    @@ -606,7 +618,7 @@ static int mem_cgroup_hierarchical_recla
    continue;
    }
    ret = try_to_free_mem_cgroup_pages(next_mem, gfp_mask, noswap);
    - if (res_counter_check_under_limit(&root_mem->res))
    + if (mem_cgroup_check_under_limit(root_mem))
    return 0;
    cgroup_lock();
    next_mem = mem_cgroup_get_next_node(next_mem, root_mem);
    @@ -709,12 +721,8 @@ static int __mem_cgroup_try_charge(struc
    * current usage of the cgroup before giving up
    *
    */
    - if (do_swap_account) {
    - if (res_counter_check_under_limit(&mem_over_limit->res) &&
    - res_counter_check_under_limit(&mem_over_limit->memsw))
    - continue;
    - } else if (res_counter_check_under_limit(&mem_over_limit->res))
    - continue;
    + if (mem_cgroup_check_under_limit(mem_over_limit))
    + continue;

    if (!nr_retries--) {
    if (oom) {
    @@ -1334,7 +1342,7 @@ int mem_cgroup_shrink_usage(struct mm_st

    do {
    progress = try_to_free_mem_cgroup_pages(mem, gfp_mask, true);
    - progress += res_counter_check_under_limit(&mem->res);
    + progress += mem_cgroup_check_under_limit(mem);
    } while (!progress && --retry);

    css_put(&mem->css);


    \
     
     \ /
      Last update: 2008-12-03 05:55    [W:0.025 / U:32.000 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site