The branch main has been updated by glebius:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=a6b982e265fd37be58bb3a5c3345a63cecad5b57

commit a6b982e265fd37be58bb3a5c3345a63cecad5b57
Author:     Gleb Smirnoff <[email protected]>
AuthorDate: 2022-08-17 18:50:31 +0000
Commit:     Gleb Smirnoff <[email protected]>
CommitDate: 2022-08-17 18:50:31 +0000

    tcp: move tcp_drain() verbatim before tcp_init()
---
 sys/netinet/tcp_subr.c | 102 ++++++++++++++++++++++++-------------------------
 1 file changed, 50 insertions(+), 52 deletions(-)

diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c
index e26fe0ec247e..51a2e23db6ef 100644
--- a/sys/netinet/tcp_subr.c
+++ b/sys/netinet/tcp_subr.c
@@ -1402,6 +1402,56 @@ deregister_tcp_functions(struct tcp_function_block *blk, 
bool quiesce,
        return (0);
 }
 
+static void
+tcp_drain(void)
+{
+       struct epoch_tracker et;
+       VNET_ITERATOR_DECL(vnet_iter);
+
+       if (!do_tcpdrain)
+               return;
+
+       NET_EPOCH_ENTER(et);
+       VNET_LIST_RLOCK_NOSLEEP();
+       VNET_FOREACH(vnet_iter) {
+               CURVNET_SET(vnet_iter);
+               struct inpcb_iterator inpi = INP_ALL_ITERATOR(&V_tcbinfo,
+                   INPLOOKUP_WLOCKPCB);
+               struct inpcb *inpb;
+               struct tcpcb *tcpb;
+
+       /*
+        * Walk the tcpbs, if existing, and flush the reassembly queue,
+        * if there is one...
+        * XXX: The "Net/3" implementation doesn't imply that the TCP
+        *      reassembly queue should be flushed, but in a situation
+        *      where we're really low on mbufs, this is potentially
+        *      useful.
+        */
+               while ((inpb = inp_next(&inpi)) != NULL) {
+                       if (inpb->inp_flags & INP_TIMEWAIT)
+                               continue;
+                       if ((tcpb = intotcpcb(inpb)) != NULL) {
+                               tcp_reass_flush(tcpb);
+                               tcp_clean_sackreport(tcpb);
+#ifdef TCP_BLACKBOX
+                               tcp_log_drain(tcpb);
+#endif
+#ifdef TCPPCAP
+                               if (tcp_pcap_aggressive_free) {
+                                       /* Free the TCP PCAP queues. */
+                                       tcp_pcap_drain(&(tcpb->t_inpkts));
+                                       tcp_pcap_drain(&(tcpb->t_outpkts));
+                               }
+#endif
+                       }
+               }
+               CURVNET_RESTORE();
+       }
+       VNET_LIST_RUNLOCK_NOSLEEP();
+       NET_EPOCH_EXIT(et);
+}
+
 static void
 tcp_vnet_init(void *arg __unused)
 {
@@ -1448,8 +1498,6 @@ tcp_vnet_init(void *arg __unused)
 VNET_SYSINIT(tcp_vnet_init, SI_SUB_PROTO_DOMAIN, SI_ORDER_FOURTH,
     tcp_vnet_init, NULL);
 
-static void tcp_drain(void);
-
 static void
 tcp_init(void *arg __unused)
 {
@@ -2517,56 +2565,6 @@ tcp_close(struct tcpcb *tp)
        return (tp);
 }
 
-static void
-tcp_drain(void)
-{
-       struct epoch_tracker et;
-       VNET_ITERATOR_DECL(vnet_iter);
-
-       if (!do_tcpdrain)
-               return;
-
-       NET_EPOCH_ENTER(et);
-       VNET_LIST_RLOCK_NOSLEEP();
-       VNET_FOREACH(vnet_iter) {
-               CURVNET_SET(vnet_iter);
-               struct inpcb_iterator inpi = INP_ALL_ITERATOR(&V_tcbinfo,
-                   INPLOOKUP_WLOCKPCB);
-               struct inpcb *inpb;
-               struct tcpcb *tcpb;
-
-       /*
-        * Walk the tcpbs, if existing, and flush the reassembly queue,
-        * if there is one...
-        * XXX: The "Net/3" implementation doesn't imply that the TCP
-        *      reassembly queue should be flushed, but in a situation
-        *      where we're really low on mbufs, this is potentially
-        *      useful.
-        */
-               while ((inpb = inp_next(&inpi)) != NULL) {
-                       if (inpb->inp_flags & INP_TIMEWAIT)
-                               continue;
-                       if ((tcpb = intotcpcb(inpb)) != NULL) {
-                               tcp_reass_flush(tcpb);
-                               tcp_clean_sackreport(tcpb);
-#ifdef TCP_BLACKBOX
-                               tcp_log_drain(tcpb);
-#endif
-#ifdef TCPPCAP
-                               if (tcp_pcap_aggressive_free) {
-                                       /* Free the TCP PCAP queues. */
-                                       tcp_pcap_drain(&(tcpb->t_inpkts));
-                                       tcp_pcap_drain(&(tcpb->t_outpkts));
-                               }
-#endif
-                       }
-               }
-               CURVNET_RESTORE();
-       }
-       VNET_LIST_RUNLOCK_NOSLEEP();
-       NET_EPOCH_EXIT(et);
-}
-
 /*
  * Notify a tcp user of an asynchronous error;
  * store error as soft error, but wake up user

Reply via email to