lkml.org 
[lkml]   [2014]   [Feb]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH -v2 6/6] Revert "mm: memcg: fix race condition between memcg teardown and swapin"
    Date
    This reverts commit 96f1c58d853497a757463e0b57fed140d6858f3a
    because it is no longer needed after "memcg: make sure that memcg is not
    offline when charging" which makes sure that no charges will be accepted
    after mem_cgroup_reparent_charges has started.

    Signed-off-by: Michal Hocko <mhocko@suse.cz>
    ---
    mm/memcontrol.c | 36 ------------------------------------
    1 file changed, 36 deletions(-)

    diff --git a/mm/memcontrol.c b/mm/memcontrol.c
    index 46b9f461cedf..6226977d53d0 100644
    --- a/mm/memcontrol.c
    +++ b/mm/memcontrol.c
    @@ -6623,42 +6623,6 @@ static void mem_cgroup_css_offline(struct cgroup_subsys_state *css)
    static void mem_cgroup_css_free(struct cgroup_subsys_state *css)
    {
    struct mem_cgroup *memcg = mem_cgroup_from_css(css);
    - /*
    - * XXX: css_offline() would be where we should reparent all
    - * memory to prepare the cgroup for destruction. However,
    - * memcg does not do css_tryget() and res_counter charging
    - * under the same RCU lock region, which means that charging
    - * could race with offlining. Offlining only happens to
    - * cgroups with no tasks in them but charges can show up
    - * without any tasks from the swapin path when the target
    - * memcg is looked up from the swapout record and not from the
    - * current task as it usually is. A race like this can leak
    - * charges and put pages with stale cgroup pointers into
    - * circulation:
    - *
    - * #0 #1
    - * lookup_swap_cgroup_id()
    - * rcu_read_lock()
    - * mem_cgroup_lookup()
    - * css_tryget()
    - * rcu_read_unlock()
    - * disable css_tryget()
    - * call_rcu()
    - * offline_css()
    - * reparent_charges()
    - * res_counter_charge()
    - * css_put()
    - * css_free()
    - * pc->mem_cgroup = dead memcg
    - * add page to lru
    - *
    - * The bulk of the charges are still moved in offline_css() to
    - * avoid pinning a lot of pages in case a long-term reference
    - * like a swapout record is deferring the css_free() to long
    - * after offlining. But this makes sure we catch any charges
    - * made after offlining:
    - */
    - mem_cgroup_reparent_charges(memcg);

    memcg_destroy_kmem(memcg);
    __mem_cgroup_free(memcg);
    --
    1.9.rc1


    \
     
     \ /
      Last update: 2014-02-04 15:01    [W:2.803 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site