Include percpu objects and the size of map metadata into the
accounting.

Signed-off-by: Roman Gushchin <g...@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

Reply via email to