inet: Cleanup on charging memory for newly accepted sockets
authorAbel Wu <wuyun.abel@bytedance.com>
Tue, 20 Jun 2023 09:27:11 +0000 (17:27 +0800)
committerJakub Kicinski <kuba@kernel.org>
Thu, 22 Jun 2023 00:37:42 +0000 (17:37 -0700)
If there is no net-memcg associated with the sock, don't bother
calculating its memory usage for charge.

Signed-off-by: Abel Wu <wuyun.abel@bytedance.com>
Link: https://lore.kernel.org/r/20230620092712.16217-1-wuyun.abel@bytedance.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ipv4/inet_connection_sock.c

index 15424de..0cc19cf 100644 (file)
@@ -706,20 +706,23 @@ struct sock *inet_csk_accept(struct sock *sk, int flags, int *err, bool kern)
 out:
        release_sock(sk);
        if (newsk && mem_cgroup_sockets_enabled) {
-               int amt;
+               int amt = 0;
 
                /* atomically get the memory usage, set and charge the
                 * newsk->sk_memcg.
                 */
                lock_sock(newsk);
 
-               /* The socket has not been accepted yet, no need to look at
-                * newsk->sk_wmem_queued.
-                */
-               amt = sk_mem_pages(newsk->sk_forward_alloc +
-                                  atomic_read(&newsk->sk_rmem_alloc));
                mem_cgroup_sk_alloc(newsk);
-               if (newsk->sk_memcg && amt)
+               if (newsk->sk_memcg) {
+                       /* The socket has not been accepted yet, no need
+                        * to look at newsk->sk_wmem_queued.
+                        */
+                       amt = sk_mem_pages(newsk->sk_forward_alloc +
+                                          atomic_read(&newsk->sk_rmem_alloc));
+               }
+
+               if (amt)
                        mem_cgroup_charge_skmem(newsk->sk_memcg, amt,
                                                GFP_KERNEL | __GFP_NOFAIL);