svn commit: r302374 - head/sys/netinet

Jonathan T. Looney jtl at FreeBSD.org
Wed Jul 6 16:17:15 UTC 2016


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);
 		}


More information about the svn-src-all mailing list