Page MenuHomeFreeBSD

D22197.id64060.diff
No OneTemporary

D22197.id64060.diff

Index: head/sys/netinet/in_pcb.c
===================================================================
--- head/sys/netinet/in_pcb.c
+++ head/sys/netinet/in_pcb.c
@@ -2252,12 +2252,10 @@
struct inpcb *inp, *tmpinp;
u_short fport = fport_arg, lport = lport_arg;
-#ifdef INVARIANTS
KASSERT((lookupflags & ~(INPLOOKUP_WILDCARD)) == 0,
("%s: invalid lookup flags %d", __func__, lookupflags));
- if (!mtx_owned(&pcbinfo->ipi_hash_lock))
- MPASS(in_epoch_verbose(net_epoch_preempt, 1));
-#endif
+ INP_HASH_LOCK_ASSERT(pcbinfo);
+
/*
* First look for an exact match.
*/
@@ -2384,7 +2382,6 @@
{
struct inpcb *inp;
- INP_HASH_RLOCK(pcbinfo);
inp = in_pcblookup_hash_locked(pcbinfo, faddr, fport, laddr, lport,
(lookupflags & ~(INPLOOKUP_RLOCKPCB | INPLOOKUP_WLOCKPCB)), ifp);
if (inp != NULL) {
@@ -2411,7 +2408,7 @@
}
#endif
}
- INP_HASH_RUNLOCK(pcbinfo);
+
return (inp);
}
Index: head/sys/netinet/tcp_subr.c
===================================================================
--- head/sys/netinet/tcp_subr.c
+++ head/sys/netinet/tcp_subr.c
@@ -2257,6 +2257,7 @@
{
struct xucred xuc;
struct sockaddr_in addrs[2];
+ struct epoch_tracker et;
struct inpcb *inp;
int error;
@@ -2266,8 +2267,10 @@
error = SYSCTL_IN(req, addrs, sizeof(addrs));
if (error)
return (error);
+ NET_EPOCH_ENTER(et);
inp = in_pcblookup(&V_tcbinfo, addrs[1].sin_addr, addrs[1].sin_port,
addrs[0].sin_addr, addrs[0].sin_port, INPLOOKUP_RLOCKPCB, NULL);
+ NET_EPOCH_EXIT(et);
if (inp != NULL) {
if (inp->inp_socket == NULL)
error = ENOENT;
@@ -2292,6 +2295,7 @@
static int
tcp6_getcred(SYSCTL_HANDLER_ARGS)
{
+ struct epoch_tracker et;
struct xucred xuc;
struct sockaddr_in6 addrs[2];
struct inpcb *inp;
@@ -2319,6 +2323,7 @@
return (EINVAL);
}
+ NET_EPOCH_ENTER(et);
#ifdef INET
if (mapped == 1)
inp = in_pcblookup(&V_tcbinfo,
@@ -2332,6 +2337,7 @@
&addrs[1].sin6_addr, addrs[1].sin6_port,
&addrs[0].sin6_addr, addrs[0].sin6_port,
INPLOOKUP_RLOCKPCB, NULL);
+ NET_EPOCH_EXIT(et);
if (inp != NULL) {
if (inp->inp_socket == NULL)
error = ENOENT;
@@ -2365,7 +2371,6 @@
struct inpcb *(*notify)(struct inpcb *, int) = tcp_notify;
struct icmp *icp;
struct in_conninfo inc;
- struct epoch_tracker et;
tcp_seq icmp_tcp_seq;
int mtu;
@@ -2397,7 +2402,6 @@
icp = (struct icmp *)((caddr_t)ip - offsetof(struct icmp, icmp_ip));
th = (struct tcphdr *)((caddr_t)ip + (ip->ip_hl << 2));
- INP_INFO_RLOCK_ET(&V_tcbinfo, et);
inp = in_pcblookup(&V_tcbinfo, faddr, th->th_dport, ip->ip_src,
th->th_sport, INPLOOKUP_WLOCKPCB, NULL);
if (inp != NULL && PRC_IS_REDIRECT(cmd)) {
@@ -2462,7 +2466,6 @@
out:
if (inp != NULL)
INP_WUNLOCK(inp);
- INP_INFO_RUNLOCK_ET(&V_tcbinfo, et);
}
#endif /* INET */
@@ -2480,7 +2483,6 @@
struct ip6ctlparam *ip6cp = NULL;
const struct sockaddr_in6 *sa6_src = NULL;
struct in_conninfo inc;
- struct epoch_tracker et;
struct tcp_ports {
uint16_t th_sport;
uint16_t th_dport;
@@ -2542,7 +2544,6 @@
}
bzero(&t_ports, sizeof(struct tcp_ports));
m_copydata(m, off, sizeof(struct tcp_ports), (caddr_t)&t_ports);
- INP_INFO_RLOCK_ET(&V_tcbinfo, et);
inp = in6_pcblookup(&V_tcbinfo, &ip6->ip6_dst, t_ports.th_dport,
&ip6->ip6_src, t_ports.th_sport, INPLOOKUP_WLOCKPCB, NULL);
if (inp != NULL && PRC_IS_REDIRECT(cmd)) {
@@ -2614,7 +2615,6 @@
out:
if (inp != NULL)
INP_WUNLOCK(inp);
- INP_INFO_RUNLOCK_ET(&V_tcbinfo, et);
}
#endif /* INET6 */
Index: head/sys/netinet/udp_usrreq.c
===================================================================
--- head/sys/netinet/udp_usrreq.c
+++ head/sys/netinet/udp_usrreq.c
@@ -963,6 +963,7 @@
{
struct xucred xuc;
struct sockaddr_in addrs[2];
+ struct epoch_tracker et;
struct inpcb *inp;
int error;
@@ -972,9 +973,11 @@
error = SYSCTL_IN(req, addrs, sizeof(addrs));
if (error)
return (error);
+ NET_EPOCH_ENTER(et);
inp = in_pcblookup(&V_udbinfo, addrs[1].sin_addr, addrs[1].sin_port,
addrs[0].sin_addr, addrs[0].sin_port,
INPLOOKUP_WILDCARD | INPLOOKUP_RLOCKPCB, NULL);
+ NET_EPOCH_EXIT(et);
if (inp != NULL) {
INP_RLOCK_ASSERT(inp);
if (inp->inp_socket == NULL)
Index: head/sys/netinet6/in6_pcb.c
===================================================================
--- head/sys/netinet6/in6_pcb.c
+++ head/sys/netinet6/in6_pcb.c
@@ -1245,7 +1245,6 @@
{
struct inpcb *inp;
- INP_HASH_RLOCK(pcbinfo);
inp = in6_pcblookup_hash_locked(pcbinfo, faddr, fport, laddr, lport,
(lookupflags & ~(INPLOOKUP_RLOCKPCB | INPLOOKUP_WLOCKPCB)), ifp);
if (inp != NULL) {
@@ -1272,7 +1271,6 @@
}
#endif
}
- INP_HASH_RUNLOCK(pcbinfo);
return (inp);
}
Index: head/sys/netinet6/udp6_usrreq.c
===================================================================
--- head/sys/netinet6/udp6_usrreq.c
+++ head/sys/netinet6/udp6_usrreq.c
@@ -634,6 +634,7 @@
{
struct xucred xuc;
struct sockaddr_in6 addrs[2];
+ struct epoch_tracker et;
struct inpcb *inp;
int error;
@@ -652,9 +653,11 @@
(error = sa6_embedscope(&addrs[1], V_ip6_use_defzone)) != 0) {
return (error);
}
+ NET_EPOCH_ENTER(et);
inp = in6_pcblookup(&V_udbinfo, &addrs[1].sin6_addr,
addrs[1].sin6_port, &addrs[0].sin6_addr, addrs[0].sin6_port,
INPLOOKUP_WILDCARD | INPLOOKUP_RLOCKPCB, NULL);
+ NET_EPOCH_EXIT(et);
if (inp != NULL) {
INP_RLOCK_ASSERT(inp);
if (inp->inp_socket == NULL)

File Metadata

Mime Type
text/plain
Expires
Sat, Mar 21, 11:20 AM (5 h, 59 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30045394
Default Alt Text
D22197.id64060.diff (5 KB)

Event Timeline