Author: jtl
Date: Wed Jul  6 16:17:13 2016
New Revision: 302374
URL: https://svnweb.freebsd.org/changeset/base/302374

Log:
  The TCPPCAP debugging feature caches recently-used mbufs for use in
  debugging TCP connections. This commit provides a mechanism to free those
  mbufs when the system is under memory pressure.
  
  Because this will result in lost debugging information, the behavior is
  controllable by a sysctl. The default setting is to free the mbufs.
  
  Reviewed by:  gnn
  Approved by:  re (gjb)
  Differential Revision:        https://reviews.freebsd.org/D6931
  Input from:   novice_techie.com

Modified:
  head/sys/netinet/tcp_pcap.c
  head/sys/netinet/tcp_pcap.h
  head/sys/netinet/tcp_subr.c

Modified: head/sys/netinet/tcp_pcap.c
==============================================================================
--- head/sys/netinet/tcp_pcap.c Wed Jul  6 16:02:15 2016        (r302373)
+++ head/sys/netinet/tcp_pcap.c Wed Jul  6 16:17:13 2016        (r302374)
@@ -42,9 +42,13 @@
 #define M_LEADINGSPACE_NOWRITE(m)                                      \
        ((m)->m_data - M_START(m))
 
+int tcp_pcap_aggressive_free = 1;
 static int tcp_pcap_clusters_referenced_cur = 0;
 static int tcp_pcap_clusters_referenced_max = 0;
 
+SYSCTL_INT(_net_inet_tcp, OID_AUTO, tcp_pcap_aggressive_free,
+       CTLFLAG_RW, &tcp_pcap_aggressive_free, 0,
+       "Free saved packets when the memory system comes under pressure");
 SYSCTL_INT(_net_inet_tcp, OID_AUTO, tcp_pcap_clusters_referenced_cur,
        CTLFLAG_RD, &tcp_pcap_clusters_referenced_cur, 0,
        "Number of clusters currently referenced on TCP PCAP queues");

Modified: head/sys/netinet/tcp_pcap.h
==============================================================================
--- head/sys/netinet/tcp_pcap.h Wed Jul  6 16:02:15 2016        (r302373)
+++ head/sys/netinet/tcp_pcap.h Wed Jul  6 16:17:13 2016        (r302374)
@@ -36,4 +36,6 @@ void tcp_pcap_tcpcb_init(struct tcpcb *t
 void tcp_pcap_set_sock_max(struct mbufq *queue, int newval);
 int tcp_pcap_get_sock_max(struct mbufq *queue);
 
+extern int tcp_pcap_aggressive_free;
+
 #endif /* _NETINET_TCP_PCAP_H_ */

Modified: head/sys/netinet/tcp_subr.c
==============================================================================
--- head/sys/netinet/tcp_subr.c Wed Jul  6 16:02:15 2016        (r302373)
+++ head/sys/netinet/tcp_subr.c Wed Jul  6 16:17:13 2016        (r302374)
@@ -1605,6 +1605,13 @@ tcp_drain(void)
                        if ((tcpb = intotcpcb(inpb)) != NULL) {
                                tcp_reass_flush(tcpb);
                                tcp_clean_sackreport(tcpb);
+#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
                        }
                        INP_WUNLOCK(inpb);
                }
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to