svn commit: r354476 - head/sys/netinet
Gleb Smirnoff
glebius at FreeBSD.org
Thu Nov 7 20:44:34 UTC 2019
Author: glebius
Date: Thu Nov 7 20:44:34 2019
New Revision: 354476
URL: https://svnweb.freebsd.org/changeset/base/354476
Log:
Remove unnecessary recursive epoch enter via INP_INFO_RLOCK
macro in divert_packet(). This function is called only from
pfil(9) filters, which in their place always run in the
network epoch.
Modified:
head/sys/netinet/ip_divert.c
Modified: head/sys/netinet/ip_divert.c
==============================================================================
--- head/sys/netinet/ip_divert.c Thu Nov 7 20:43:12 2019 (r354475)
+++ head/sys/netinet/ip_divert.c Thu Nov 7 20:44:34 2019 (r354476)
@@ -192,8 +192,9 @@ divert_packet(struct mbuf *m, bool incoming)
u_int16_t nport;
struct sockaddr_in divsrc;
struct m_tag *mtag;
- struct epoch_tracker et;
+ NET_EPOCH_ASSERT();
+
mtag = m_tag_locate(m, MTAG_IPFW_RULE, 0, NULL);
if (mtag == NULL) {
m_freem(m);
@@ -231,7 +232,6 @@ divert_packet(struct mbuf *m, bool incoming)
/* Sanity check */
M_ASSERTPKTHDR(m);
- NET_EPOCH_ASSERT();
/* Find IP address for receive interface */
ifp = m->m_pkthdr.rcvif;
@@ -272,7 +272,6 @@ divert_packet(struct mbuf *m, bool incoming)
/* Put packet on socket queue, if any */
sa = NULL;
nport = htons((u_int16_t)(((struct ipfw_rule_ref *)(mtag+1))->info));
- INP_INFO_RLOCK_ET(&V_divcbinfo, et);
CK_LIST_FOREACH(inp, &V_divcb, inp_list) {
/* XXX why does only one socket match? */
if (inp->inp_lport == nport) {
@@ -290,7 +289,6 @@ divert_packet(struct mbuf *m, bool incoming)
break;
}
}
- INP_INFO_RUNLOCK_ET(&V_divcbinfo, et);
if (sa == NULL) {
m_freem(m);
KMOD_IPSTAT_INC(ips_noproto);
More information about the svn-src-all
mailing list