lkml.org 
[lkml]   [2020]   [Nov]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH bpf-next v8 15/34] bpf: memcg-based memory accounting for bpf local storage maps
    Date
    Account memory used by bpf local storage maps:
    per-socket, per-inode and per-task storages.

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

    diff --git a/kernel/bpf/bpf_local_storage.c b/kernel/bpf/bpf_local_storage.c
    index 5d3a7af9ba9b..abd0ea385274 100644
    --- a/kernel/bpf/bpf_local_storage.c
    +++ b/kernel/bpf/bpf_local_storage.c
    @@ -67,7 +67,9 @@ bpf_selem_alloc(struct bpf_local_storage_map *smap, void *owner,
    if (charge_mem && mem_charge(smap, owner, smap->elem_size))
    return NULL;

    - selem = kzalloc(smap->elem_size, GFP_ATOMIC | __GFP_NOWARN);
    + selem = bpf_map_kmalloc_node(&smap->map, smap->elem_size,
    + GFP_ATOMIC | __GFP_NOWARN | __GFP_ZERO |
    + __GFP_ACCOUNT, NUMA_NO_NODE);
    if (selem) {
    if (value)
    memcpy(SDATA(selem)->data, value, smap->map.value_size);
    @@ -264,7 +266,9 @@ int bpf_local_storage_alloc(void *owner,
    if (err)
    return err;

    - storage = kzalloc(sizeof(*storage), GFP_ATOMIC | __GFP_NOWARN);
    + storage = bpf_map_kmalloc_node(&smap->map, sizeof(*storage),
    + GFP_ATOMIC | __GFP_NOWARN | __GFP_ZERO |
    + __GFP_ACCOUNT, NUMA_NO_NODE);
    if (!storage) {
    err = -ENOMEM;
    goto uncharge;
    @@ -546,7 +550,7 @@ struct bpf_local_storage_map *bpf_local_storage_map_alloc(union bpf_attr *attr)
    u64 cost;
    int ret;

    - smap = kzalloc(sizeof(*smap), GFP_USER | __GFP_NOWARN);
    + smap = kzalloc(sizeof(*smap), GFP_USER | __GFP_NOWARN | __GFP_ACCOUNT);
    if (!smap)
    return ERR_PTR(-ENOMEM);
    bpf_map_init_from_attr(&smap->map, attr);
    @@ -564,7 +568,7 @@ struct bpf_local_storage_map *bpf_local_storage_map_alloc(union bpf_attr *attr)
    }

    smap->buckets = kvcalloc(sizeof(*smap->buckets), nbuckets,
    - GFP_USER | __GFP_NOWARN);
    + GFP_USER | __GFP_NOWARN | __GFP_ACCOUNT);
    if (!smap->buckets) {
    bpf_map_charge_finish(&smap->map.memory);
    kfree(smap);
    --
    2.26.2
    \
     
     \ /
      Last update: 2020-11-25 04:07    [W:3.553 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site