Message ID | 20200727184506.2279656-11-guro@fb.com |
---|---|
State | Changes Requested |
Delegated to: | BPF Maintainers |
Headers | show |
Series | bpf: switch to memcg-based memory accounting | expand |
On Mon, Jul 27, 2020 at 12:28 PM Roman Gushchin <guro@fb.com> wrote: > > Account memory used by the socket storage. > > Signed-off-by: Roman Gushchin <guro@fb.com> Acked-by: Song Liu <songliubraving@fb.com> > --- > net/core/bpf_sk_storage.c | 12 +++++++----- > 1 file changed, 7 insertions(+), 5 deletions(-) > > diff --git a/net/core/bpf_sk_storage.c b/net/core/bpf_sk_storage.c > index eafcd15e7dfd..fbcd03cd00d3 100644 > --- a/net/core/bpf_sk_storage.c > +++ b/net/core/bpf_sk_storage.c > @@ -130,7 +130,8 @@ static struct bpf_sk_storage_elem *selem_alloc(struct bpf_sk_storage_map *smap, > if (charge_omem && omem_charge(sk, smap->elem_size)) > return NULL; > > - selem = kzalloc(smap->elem_size, GFP_ATOMIC | __GFP_NOWARN); > + selem = kzalloc(smap->elem_size, > + GFP_ATOMIC | __GFP_NOWARN | __GFP_ACCOUNT); > if (selem) { > if (value) > memcpy(SDATA(selem)->data, value, smap->map.value_size); > @@ -337,7 +338,8 @@ static int sk_storage_alloc(struct sock *sk, > if (err) > return err; > > - sk_storage = kzalloc(sizeof(*sk_storage), GFP_ATOMIC | __GFP_NOWARN); > + sk_storage = kzalloc(sizeof(*sk_storage), > + GFP_ATOMIC | __GFP_NOWARN | __GFP_ACCOUNT); > if (!sk_storage) { > err = -ENOMEM; > goto uncharge; > @@ -677,7 +679,7 @@ static struct bpf_map *bpf_sk_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); > @@ -695,7 +697,7 @@ static struct bpf_map *bpf_sk_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); > @@ -1024,7 +1026,7 @@ bpf_sk_storage_diag_alloc(const struct nlattr *nla_stgs) > } > > diag = kzalloc(sizeof(*diag) + sizeof(diag->maps[0]) * nr_maps, > - GFP_KERNEL); > + GFP_KERNEL | __GFP_ACCOUNT); > if (!diag) > return ERR_PTR(-ENOMEM); > > -- > 2.26.2 >
diff --git a/net/core/bpf_sk_storage.c b/net/core/bpf_sk_storage.c index eafcd15e7dfd..fbcd03cd00d3 100644 --- a/net/core/bpf_sk_storage.c +++ b/net/core/bpf_sk_storage.c @@ -130,7 +130,8 @@ static struct bpf_sk_storage_elem *selem_alloc(struct bpf_sk_storage_map *smap, if (charge_omem && omem_charge(sk, smap->elem_size)) return NULL; - selem = kzalloc(smap->elem_size, GFP_ATOMIC | __GFP_NOWARN); + selem = kzalloc(smap->elem_size, + GFP_ATOMIC | __GFP_NOWARN | __GFP_ACCOUNT); if (selem) { if (value) memcpy(SDATA(selem)->data, value, smap->map.value_size); @@ -337,7 +338,8 @@ static int sk_storage_alloc(struct sock *sk, if (err) return err; - sk_storage = kzalloc(sizeof(*sk_storage), GFP_ATOMIC | __GFP_NOWARN); + sk_storage = kzalloc(sizeof(*sk_storage), + GFP_ATOMIC | __GFP_NOWARN | __GFP_ACCOUNT); if (!sk_storage) { err = -ENOMEM; goto uncharge; @@ -677,7 +679,7 @@ static struct bpf_map *bpf_sk_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); @@ -695,7 +697,7 @@ static struct bpf_map *bpf_sk_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); @@ -1024,7 +1026,7 @@ bpf_sk_storage_diag_alloc(const struct nlattr *nla_stgs) } diag = kzalloc(sizeof(*diag) + sizeof(diag->maps[0]) * nr_maps, - GFP_KERNEL); + GFP_KERNEL | __GFP_ACCOUNT); if (!diag) return ERR_PTR(-ENOMEM);
Account memory used by the socket storage. Signed-off-by: Roman Gushchin <guro@fb.com> --- net/core/bpf_sk_storage.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-)