[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAAVpQUB3QEToRRcUQR4C2_K2OdwDa7sHQuuhA8K2Tbpkad+ocg@mail.gmail.com>
Date: Tue, 3 Feb 2026 16:38:02 -0800
From: Kuniyuki Iwashima <kuniyu@...gle.com>
To: Eric Dumazet <edumazet@...gle.com>
Cc: "David S . Miller" <davem@...emloft.net>, Jakub Kicinski <kuba@...nel.org>,
Paolo Abeni <pabeni@...hat.com>, Simon Horman <horms@...nel.org>,
Neal Cardwell <ncardwell@...gle.com>, netdev@...r.kernel.org, eric.dumazet@...il.com
Subject: Re: [PATCH v2 net-next 4/4] tcp: move __reqsk_free() out of line
On Mon, Feb 2, 2026 at 9:22 PM Eric Dumazet <edumazet@...gle.com> wrote:
>
> Inlining __reqsk_free() is overkill, let's reclaim 2 Kbytes of text.
>
> $ scripts/bloat-o-meter -t vmlinux.old vmlinux.new
> add/remove: 2/4 grow/shrink: 2/14 up/down: 225/-2338 (-2113)
> Function old new delta
> __reqsk_free - 114 +114
> sock_edemux 18 82 +64
> inet_csk_listen_start 233 264 +31
> __pfx___reqsk_free - 16 +16
> __pfx_reqsk_queue_alloc 16 - -16
> __pfx_reqsk_free 16 - -16
> reqsk_queue_alloc 46 - -46
> tcp_req_err 272 177 -95
> reqsk_fastopen_remove 348 253 -95
> cookie_bpf_check 157 62 -95
> cookie_tcp_reqsk_alloc 387 290 -97
> cookie_v4_check 1568 1465 -103
> reqsk_free 105 - -105
> cookie_v6_check 1519 1412 -107
> sock_gen_put 187 78 -109
> sock_pfree 212 82 -130
> tcp_try_fastopen 1818 1683 -135
> tcp_v4_rcv 3478 3294 -184
> reqsk_put 306 90 -216
> tcp_get_cookie_sock 551 318 -233
> tcp_v6_rcv 3404 3141 -263
> tcp_conn_request 2677 2384 -293
> Total: Before=24887415, After=24885302, chg -0.01%
>
> Signed-off-by: Eric Dumazet <edumazet@...gle.com>
> ---
> include/net/request_sock.h | 9 +--------
> net/ipv4/inet_connection_sock.c | 10 ++++++++++
> 2 files changed, 11 insertions(+), 8 deletions(-)
>
> diff --git a/include/net/request_sock.h b/include/net/request_sock.h
> index 23bb909771fb..5a9c826a7092 100644
> --- a/include/net/request_sock.h
> +++ b/include/net/request_sock.h
> @@ -123,14 +123,7 @@ static inline struct sock *skb_steal_sock(struct sk_buff *skb,
> return sk;
> }
>
> -static inline void __reqsk_free(struct request_sock *req)
> -{
> - req->rsk_ops->destructor(req);
> - if (req->rsk_listener)
> - sock_put(req->rsk_listener);
> - kfree(req->saved_syn);
> - kmem_cache_free(req->rsk_ops->slab, req);
> -}
> +void __reqsk_free(struct request_sock *req);
>
> static inline void reqsk_free(struct request_sock *req)
> {
> diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c
> index dc4e2c5725cd..3d0997c39418 100644
> --- a/net/ipv4/inet_connection_sock.c
> +++ b/net/ipv4/inet_connection_sock.c
> @@ -918,6 +918,16 @@ struct request_sock *inet_reqsk_alloc(const struct request_sock_ops *ops,
> }
> EXPORT_SYMBOL(inet_reqsk_alloc);
>
> +void __reqsk_free(struct request_sock *req)
> +{
> + req->rsk_ops->destructor(req);
> + if (req->rsk_listener)
> + sock_put(req->rsk_listener);
> + kfree(req->saved_syn);
> + kmem_cache_free(req->rsk_ops->slab, req);
> +}
> +EXPORT_IPV6_MOD_GPL(__reqsk_free);
Probably this needs to be EXPORT_SYMBOL_GPL() due to
drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_cm.c ?
> +
> static struct request_sock *inet_reqsk_clone(struct request_sock *req,
> struct sock *sk)
> {
> --
> 2.53.0.rc1.225.gd81095ad13-goog
>
Powered by blists - more mailing lists