git: d6fb9f8ca344 - main - tcp: inherit CC algorithm from listener
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 03 Aug 2024 20:59:56 UTC
The branch main has been updated by tuexen:
URL: https://cgit.FreeBSD.org/src/commit/?id=d6fb9f8ca344bfe47fc79d3ae81112a8bc036307
commit d6fb9f8ca344bfe47fc79d3ae81112a8bc036307
Author: Michael Tuexen <tuexen@FreeBSD.org>
AuthorDate: 2024-08-03 20:56:39 +0000
Commit: Michael Tuexen <tuexen@FreeBSD.org>
CommitDate: 2024-08-03 20:56:39 +0000
tcp: inherit CC algorithm from listener
Like any other parameter, the CC algorithm should be inherited from
the listener.
Reviewed by: cc
Sponsored by: Netflix, Inc.
Differential Revision: https://reviews.freebsd.org/D46143
---
sys/netinet/tcp_subr.c | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c
index 145496afa098..9e95a87b3596 100644
--- a/sys/netinet/tcp_subr.c
+++ b/sys/netinet/tcp_subr.c
@@ -2259,11 +2259,20 @@ tcp_newtcpcb(struct inpcb *inp, struct tcpcb *listening_tcb)
KASSERT((tp->t_fb->tfb_flags & TCP_FUNC_BEING_REMOVED) == 0,
("tcp_newtcpcb: using TFB being removed"));
rw_runlock(&tcp_function_lock);
- /*
- * Use the current system default CC algorithm.
- */
- cc_attach(tp, CC_DEFAULT_ALGO());
-
+ CC_LIST_RLOCK();
+ if (listening_tcb != NULL) {
+ if (CC_ALGO(listening_tcb)->flags & CC_MODULE_BEING_REMOVED) {
+ CC_LIST_RUNLOCK();
+ if (tp->t_fb->tfb_tcp_fb_fini)
+ (*tp->t_fb->tfb_tcp_fb_fini)(tp, 1);
+ refcount_release(&tp->t_fb->tfb_refcnt);
+ return (NULL);
+ }
+ CC_ALGO(tp) = CC_ALGO(listening_tcb);
+ } else
+ CC_ALGO(tp) = CC_DEFAULT_ALGO();
+ cc_refer(CC_ALGO(tp));
+ CC_LIST_RUNLOCK();
if (CC_ALGO(tp)->cb_init != NULL)
if (CC_ALGO(tp)->cb_init(&tp->t_ccv, NULL) > 0) {
cc_detach(tp);