[Devel] [PATCH RHEL8 COMMIT] net/sock: teach sock_kmalloc() to call kvmalloc() when possible
Konstantin Khorenko
khorenko at virtuozzo.com
Wed Jun 2 13:26:01 MSK 2021
The commit is pushed to "branch-rh8-4.18.0-240.1.1.vz8.5.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh8-4.18.0-240.1.1.vz8.5.34
------>
commit 3b77a0fd64177e3f8b7ba3f8c11e94a776378925
Author: Konstantin Khorenko <khorenko at virtuozzo.com>
Date: Wed Jun 2 13:26:01 2021 +0300
net/sock: teach sock_kmalloc() to call kvmalloc() when possible
sock_setsockopt()
sk_attach_filter()
sock_kmalloc()
Memory size to be allocated depends on the number of rules provided by
userspace, but not more than net.core.optmem_max (20480 by default),
which still allows to allocate 3rd order pages via kmalloc() =>
it's better to substitute it with kvmalloc().
But sock_kmalloc() can be called with GFP_ATOMIC from some places,
so we cannot unconditionally call kvmalloc() instead of kmalloc().
Hopefully sk_attach_filter() calls sock_kmalloc() with GFP_KERNEL,
so kvmalloc() can be used there.
=> use kvmalloc_check() which calls kvmalloc() if it's allowed
by provided flags.
https://jira.sw.ru/browse/PSBM-82593
Signed-off-by: Konstantin Khorenko <khorenko at virtuozzo.com>
Ughh, but ok.
Reviewed-by: Andrey Ryabinin <aryabinin at virtuozzo.com>
(cherry picked from vz7 commit 29b736c18d06 ("net/sock: teach sock_kmalloc() to
call kvmalloc() when possible"))
VZ 8 rebase part https://jira.sw.ru/browse/PSBM-127798
Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn at virtuozzo.com>
---
net/core/sock.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/net/core/sock.c b/net/core/sock.c
index 18b8908d200a..03ad9fbb2906 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -2107,7 +2107,7 @@ void *sock_kmalloc(struct sock *sk, int size, gfp_t priority)
* might sleep.
*/
atomic_add(size, &sk->sk_omem_alloc);
- mem = kmalloc(size, priority);
+ mem = kvmalloc_check(size, priority);
if (mem)
return mem;
atomic_sub(size, &sk->sk_omem_alloc);
@@ -2126,9 +2126,9 @@ static inline void __sock_kfree_s(struct sock *sk, void *mem, int size,
if (WARN_ON_ONCE(!mem))
return;
if (nullify)
- kzfree(mem);
- else
- kfree(mem);
+ memset(mem, 0, size);
+
+ kvfree(mem);
atomic_sub(size, &sk->sk_omem_alloc);
}
More information about the Devel
mailing list