lkml.org 
[lkml]   [2020]   [Jul]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH bpf-next 07/35] bpf: refine memcg-based memory accounting for hashtab maps
    Date
    Include percpu objects and the size of map metadata into the
    accounting.

    Signed-off-by: Roman Gushchin <guro@fb.com>
    ---
    kernel/bpf/hashtab.c | 14 +++++++-------
    1 file changed, 7 insertions(+), 7 deletions(-)

    diff --git a/kernel/bpf/hashtab.c b/kernel/bpf/hashtab.c
    index 024276787055..9d0432170812 100644
    --- a/kernel/bpf/hashtab.c
    +++ b/kernel/bpf/hashtab.c
    @@ -263,10 +263,11 @@ static int prealloc_init(struct bpf_htab *htab)
    goto skip_percpu_elems;

    for (i = 0; i < num_entries; i++) {
    + const gfp_t gfp = GFP_USER | __GFP_NOWARN | __GFP_ACCOUNT;
    u32 size = round_up(htab->map.value_size, 8);
    void __percpu *pptr;

    - pptr = __alloc_percpu_gfp(size, 8, GFP_USER | __GFP_NOWARN);
    + pptr = __alloc_percpu_gfp(size, 8, gfp);
    if (!pptr)
    goto free_elems;
    htab_elem_set_ptr(get_htab_elem(htab, i), htab->map.key_size,
    @@ -321,7 +322,7 @@ static int alloc_extra_elems(struct bpf_htab *htab)
    int cpu;

    pptr = __alloc_percpu_gfp(sizeof(struct htab_elem *), 8,
    - GFP_USER | __GFP_NOWARN);
    + GFP_USER | __GFP_NOWARN | __GFP_ACCOUNT);
    if (!pptr)
    return -ENOMEM;

    @@ -424,7 +425,7 @@ static struct bpf_map *htab_map_alloc(union bpf_attr *attr)
    u64 cost;
    int err;

    - htab = kzalloc(sizeof(*htab), GFP_USER);
    + htab = kzalloc(sizeof(*htab), GFP_USER | __GFP_ACCOUNT);
    if (!htab)
    return ERR_PTR(-ENOMEM);

    @@ -827,6 +828,7 @@ static struct htab_elem *alloc_htab_elem(struct bpf_htab *htab, void *key,
    bool percpu, bool onallcpus,
    struct htab_elem *old_elem)
    {
    + const gfp_t gfp = GFP_ATOMIC | __GFP_NOWARN | __GFP_ACCOUNT;
    u32 size = htab->map.value_size;
    bool prealloc = htab_is_prealloc(htab);
    struct htab_elem *l_new, **pl_new;
    @@ -859,8 +861,7 @@ static struct htab_elem *alloc_htab_elem(struct bpf_htab *htab, void *key,
    l_new = ERR_PTR(-E2BIG);
    goto dec_count;
    }
    - l_new = kmalloc_node(htab->elem_size, GFP_ATOMIC | __GFP_NOWARN,
    - htab->map.numa_node);
    + l_new = kmalloc_node(htab->elem_size, gfp, htab->map.numa_node);
    if (!l_new) {
    l_new = ERR_PTR(-ENOMEM);
    goto dec_count;
    @@ -876,8 +877,7 @@ static struct htab_elem *alloc_htab_elem(struct bpf_htab *htab, void *key,
    pptr = htab_elem_get_ptr(l_new, key_size);
    } else {
    /* alloc_percpu zero-fills */
    - pptr = __alloc_percpu_gfp(size, 8,
    - GFP_ATOMIC | __GFP_NOWARN);
    + pptr = __alloc_percpu_gfp(size, 8, gfp);
    if (!pptr) {
    kfree(l_new);
    l_new = ERR_PTR(-ENOMEM);
    --
    2.26.2
    \
     
     \ /
      Last update: 2020-07-25 02:08    [W:4.137 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site