mirror of
https://github.com/torvalds/linux.git
synced 2026-06-04 20:46:48 +02:00
Merge branch 'tcp-small-code-reorg'
Eric Dumazet says: ==================== tcp: small code reorg Replace a WARN_ON_ONCE() that never triggered to DEBUG_NET_WARN_ON_ONCE() in reqsk_free(). Move inet_reqsk_alloc() and reqsk_alloc() to inet_connection_sock.c, to unclutter net/ipv4/tcp_input.c and include/net/request_sock.h ==================== Link: https://lore.kernel.org/r/20240605071553.1365557-1-edumazet@google.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
commit
7493328144
|
|
@ -128,39 +128,6 @@ static inline struct sock *skb_steal_sock(struct sk_buff *skb,
|
|||
return sk;
|
||||
}
|
||||
|
||||
static inline struct request_sock *
|
||||
reqsk_alloc_noprof(const struct request_sock_ops *ops, struct sock *sk_listener,
|
||||
bool attach_listener)
|
||||
{
|
||||
struct request_sock *req;
|
||||
|
||||
req = kmem_cache_alloc_noprof(ops->slab, GFP_ATOMIC | __GFP_NOWARN);
|
||||
if (!req)
|
||||
return NULL;
|
||||
req->rsk_listener = NULL;
|
||||
if (attach_listener) {
|
||||
if (unlikely(!refcount_inc_not_zero(&sk_listener->sk_refcnt))) {
|
||||
kmem_cache_free(ops->slab, req);
|
||||
return NULL;
|
||||
}
|
||||
req->rsk_listener = sk_listener;
|
||||
}
|
||||
req->rsk_ops = ops;
|
||||
req_to_sk(req)->sk_prot = sk_listener->sk_prot;
|
||||
sk_node_init(&req_to_sk(req)->sk_node);
|
||||
sk_tx_queue_clear(req_to_sk(req));
|
||||
req->saved_syn = NULL;
|
||||
req->syncookie = 0;
|
||||
req->timeout = 0;
|
||||
req->num_timeout = 0;
|
||||
req->num_retrans = 0;
|
||||
req->sk = NULL;
|
||||
refcount_set(&req->rsk_refcnt, 0);
|
||||
|
||||
return req;
|
||||
}
|
||||
#define reqsk_alloc(...) alloc_hooks(reqsk_alloc_noprof(__VA_ARGS__))
|
||||
|
||||
static inline void __reqsk_free(struct request_sock *req)
|
||||
{
|
||||
req->rsk_ops->destructor(req);
|
||||
|
|
@ -172,14 +139,14 @@ static inline void __reqsk_free(struct request_sock *req)
|
|||
|
||||
static inline void reqsk_free(struct request_sock *req)
|
||||
{
|
||||
WARN_ON_ONCE(refcount_read(&req->rsk_refcnt) != 0);
|
||||
DEBUG_NET_WARN_ON_ONCE(refcount_read(&req->rsk_refcnt) != 0);
|
||||
__reqsk_free(req);
|
||||
}
|
||||
|
||||
static inline void reqsk_put(struct request_sock *req)
|
||||
{
|
||||
if (refcount_dec_and_test(&req->rsk_refcnt))
|
||||
reqsk_free(req);
|
||||
__reqsk_free(req);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -911,6 +911,64 @@ int inet_rtx_syn_ack(const struct sock *parent, struct request_sock *req)
|
|||
}
|
||||
EXPORT_SYMBOL(inet_rtx_syn_ack);
|
||||
|
||||
static struct request_sock *
|
||||
reqsk_alloc_noprof(const struct request_sock_ops *ops, struct sock *sk_listener,
|
||||
bool attach_listener)
|
||||
{
|
||||
struct request_sock *req;
|
||||
|
||||
req = kmem_cache_alloc_noprof(ops->slab, GFP_ATOMIC | __GFP_NOWARN);
|
||||
if (!req)
|
||||
return NULL;
|
||||
req->rsk_listener = NULL;
|
||||
if (attach_listener) {
|
||||
if (unlikely(!refcount_inc_not_zero(&sk_listener->sk_refcnt))) {
|
||||
kmem_cache_free(ops->slab, req);
|
||||
return NULL;
|
||||
}
|
||||
req->rsk_listener = sk_listener;
|
||||
}
|
||||
req->rsk_ops = ops;
|
||||
req_to_sk(req)->sk_prot = sk_listener->sk_prot;
|
||||
sk_node_init(&req_to_sk(req)->sk_node);
|
||||
sk_tx_queue_clear(req_to_sk(req));
|
||||
req->saved_syn = NULL;
|
||||
req->syncookie = 0;
|
||||
req->timeout = 0;
|
||||
req->num_timeout = 0;
|
||||
req->num_retrans = 0;
|
||||
req->sk = NULL;
|
||||
refcount_set(&req->rsk_refcnt, 0);
|
||||
|
||||
return req;
|
||||
}
|
||||
#define reqsk_alloc(...) alloc_hooks(reqsk_alloc_noprof(__VA_ARGS__))
|
||||
|
||||
struct request_sock *inet_reqsk_alloc(const struct request_sock_ops *ops,
|
||||
struct sock *sk_listener,
|
||||
bool attach_listener)
|
||||
{
|
||||
struct request_sock *req = reqsk_alloc(ops, sk_listener,
|
||||
attach_listener);
|
||||
|
||||
if (req) {
|
||||
struct inet_request_sock *ireq = inet_rsk(req);
|
||||
|
||||
ireq->ireq_opt = NULL;
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
ireq->pktopts = NULL;
|
||||
#endif
|
||||
atomic64_set(&ireq->ir_cookie, 0);
|
||||
ireq->ireq_state = TCP_NEW_SYN_RECV;
|
||||
write_pnet(&ireq->ireq_net, sock_net(sk_listener));
|
||||
ireq->ireq_family = sk_listener->sk_family;
|
||||
req->timeout = TCP_TIMEOUT_INIT;
|
||||
}
|
||||
|
||||
return req;
|
||||
}
|
||||
EXPORT_SYMBOL(inet_reqsk_alloc);
|
||||
|
||||
static struct request_sock *inet_reqsk_clone(struct request_sock *req,
|
||||
struct sock *sk)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -6986,31 +6986,6 @@ static void tcp_openreq_init(struct request_sock *req,
|
|||
#endif
|
||||
}
|
||||
|
||||
struct request_sock *inet_reqsk_alloc(const struct request_sock_ops *ops,
|
||||
struct sock *sk_listener,
|
||||
bool attach_listener)
|
||||
{
|
||||
struct request_sock *req = reqsk_alloc(ops, sk_listener,
|
||||
attach_listener);
|
||||
|
||||
if (req) {
|
||||
struct inet_request_sock *ireq = inet_rsk(req);
|
||||
|
||||
ireq->ireq_opt = NULL;
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
ireq->pktopts = NULL;
|
||||
#endif
|
||||
atomic64_set(&ireq->ir_cookie, 0);
|
||||
ireq->ireq_state = TCP_NEW_SYN_RECV;
|
||||
write_pnet(&ireq->ireq_net, sock_net(sk_listener));
|
||||
ireq->ireq_family = sk_listener->sk_family;
|
||||
req->timeout = TCP_TIMEOUT_INIT;
|
||||
}
|
||||
|
||||
return req;
|
||||
}
|
||||
EXPORT_SYMBOL(inet_reqsk_alloc);
|
||||
|
||||
/*
|
||||
* Return true if a syncookie should be sent
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user