• Vladimir Davydov's avatar
    memcg: simplify charging kmem pages · d05e83a6
    Vladimir Davydov authored
    Charging kmem pages proceeds in two steps.  First, we try to charge the
    allocation size to the memcg the current task belongs to, then we allocate
    a page and "commit" the charge storing the pointer to the memcg in the
    page struct.
    
    Such a design looks overcomplicated, because there is not much sense in
    trying charging the allocation before actually allocating a page: we won't
    be able to consume much memory over the limit even if we charge after
    doing the actual allocation, besides we already charge user pages post
    factum, so being pedantic with kmem pages just looks pointless.
    
    So this patch simplifies the design by merging the "charge" and the
    "commit" steps into the same function, which takes the allocated page.
    
    Also, rename the charge and uncharge methods to memcg_kmem_charge and
    memcg_kmem_uncharge and make the charge method return error code instead
    of bool to conform to mem_cgroup_try_charge.
    Signed-off-by: default avatarVladimir Davydov <vdavydov@virtuozzo.com>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    d05e83a6
page_alloc.c 194 KB